代码之家  ›  专栏  ›  技术社区  ›  Peri Hartman

imageview-需要覆盖onShowPress行为

  •  0
  • Peri Hartman  · 技术社区  · 12 年前

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

    同样,我将需要长时间的新闻处理;还不知道ImageView是否能做到这一点。

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

    还有一点需要注意:我已经考虑过(并尝试过)向ImageView添加手势检测器,但后来似乎我需要重新实现onClick处理——无论如何,该活动停止接收onClick。

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

    谢谢

    编辑: 用于监测触摸动作的测试代码: 包com.example.mmockup;

    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 回复  |  直到 12 年前
        1
  •  1
  •   Jeff    12 年前

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

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

    至于测试代码,onLongClick()返回false,这表明长点击没有被消耗。尝试将返回值更改为true,这样就可以防止onClick()也被激发。此外,您还需要调用startDrag()方法来触发onDrag(()事件。请参阅 android.view documentation 有关不同事件侦听器和startDrag()方法的更多信息。

        2
  •  0
  •   jtt    12 年前

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

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

    它有两种状态,也因为它是一个视图,有OnClick和OnLongClick可用。