imageview - 需要覆盖onShowPress行为

时间:2012-08-03 23:20:09

标签: android onclick imageview

新手问题。 我在我的活动布局中使用ImageView,并希望与按钮类似的行为。我注意到ImageView已经生成了onClick。它没有做的是在触摸和取消触摸时提供任何视觉反馈,这是我想要添加的。

同样,我需要长按处理;还不知道ImageView是否这样做。

我挖了一下,我看到View实现了Runnable;当用户点击图像时会调用performClick,然后调用ImageView.PerformClick,最后调用onClick以获取所有侦听器(这是我的活动)。当ImageView处理PerformClick时,改变图像外观为时已晚;我如何在onShowPress时间做到这一点?

还有一点需要注意:我已经看过(并尝试过)将一个gestureDetector添加到ImageView,但是看来我需要重新实现onClick处理 - 无论如何,活动停止接收onClick。

可能有一种完全不同的方式来做我想做的事情,我很乐意听到它。

感谢。

编辑: 用于监控触摸操作的测试代码:     包com.example.mockup;

import android.content.Context;
import android.util.AttributeSet;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;

public class ImageGestureButton extends ImageButton
   implements View.OnTouchListener, View.OnClickListener, View.OnDragListener,
   View.OnLongClickListener
{
  public ImageGestureButton (Context context, AttributeSet attrs)
  {
    super(context, attrs);
    setOnTouchListener (this);
    setOnClickListener (this);
    setOnLongClickListener (this);
    setOnDragListener (this);
    setLongClickable (true);
  }

  public boolean onTouch (View v, MotionEvent e)
  {
    System.out.println ("onTouch " + e.getAction());
    return false;
  }

  public void onClick (View v)
  {
    System.out.println ("onClick");
  }

  public boolean onDrag (View v, DragEvent e)
  {
    System.out.println ("onDrag");
    return false;
  }

  public boolean onLongClick (View v)
  {
    System.out.println ("onLongClick");
    return false;
  }

}

2 个答案:

答案 0 :(得分:1)

我会使用ImageButton。然后使用setOnClickListener()连接您在单击时要调用的方法。此外,您可以使用setOnLongClickListener()进行长按行为。

最后,您还可以根据状态(聚焦,选择等)设置不同的背景,颜色等。看一下文档。

对于测试代码,onLongClick()返回false,表示没有消耗长按。尝试将返回值更改为true,这应该停止onClick()也会被触发。此外,您需要调用startDrag()方法以触发onDrag()事件。有关不同事件侦听器和startDrag()方法的详细信息,请参阅android.view documentation

答案 1 :(得分:0)

听起来你想要做的就是使用并扩展它:

http://developer.android.com/reference/android/widget/ToggleButton.html

它有两个状态,因为它的视图,OnClick和OnLongClick可用。