如何同时运行imageClick()和onTouchEvent()?

时间:2012-09-18 17:09:17

标签: android

我在xml(和其他元素)中有这个图像:

        <ImageView
        android:clickable="true"  
android:onClick="imageClick" 
        android:id="@+id/Decena0"
        android:layout_width="120dp"
        android:layout_height="120dp"
        tools:ignore="ContentDescription" />

当我按下图像并且我不抬起手指时,我想运行下面两种方法: 第一:

public void imageClick(View view) {  
//Implement image click function  
Log.e("Example", "Imagen clickada");
}

第二

@Override
public boolean onTouchEvent(MotionEvent event) {
//Coordenadas
int x = (int) event.getX();
int y = (int) event.getY();

switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
            break;
    case MotionEvent.ACTION_MOVE;
            break;
    case MotionEvent.ACTION_UP:
    break;
}   
return true;
    }

我怎么做?因为如果我按下图像并抬起我的手指在图像上,只运行第一种方法(我完全理解),但如果我按下图像,我不抬起手指移动我的手指,不运行任何方法。如果我点击没有图像的其他地方,第二种方法效果很好。

全部谢谢

2 个答案:

答案 0 :(得分:1)

根据onTouchEvent的文档:

  

返回

     

如果事件被处理则为真,否则为假。

因此,当您的方法返回true时,其他事件将不会触发。如果您还想要运行任何点击侦听器,请尝试返回false

答案 1 :(得分:0)

你可以使用public abstract boolean onLongClick (View v) 单击并保持视图时调用。 参数: v已单击并保持的视图。 返回: 如果回调消耗了长按,则返回true,否则返回false。

或类似的东西

@Override
    public boolean onTouchEvent(MotionEvent e,  MapView map) { //this is for map on touch
        // TODO Auto-generated method stub

        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            start = e.getEventTime();
            int x = (int) e.getX();
            int y = (int) e.getY();
            touchedPoint = map.getProjection().fromPixels(x, y);

        }

        if (e.getAction() == MotionEvent.ACTION_UP) {
            stop = e.getEventTime();
        }
        if (stop - start > 2000) { //your code on long touch, in this case more than 2 sec
     }
            });