0

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

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

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

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

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

谢谢。

编辑:监控触摸动作的测试代码:package 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;
  }

}
4

2 回答 2

1

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

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

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

于 2012-08-03T23:33:35.857 回答
0

听起来你想做的是使用和扩展它:

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

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

于 2012-08-04T05:00:56.783 回答