0

我在 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;
    }

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

谢谢大家

4

2 回答 2

1

根据onTouchEvent的文档:

退货

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

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

于 2012-09-18T17:13:27.923 回答
0

您可以public abstract boolean onLongClick (View v) 在单击并按住视图时使用 Called。参数: 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
     }
            }); 
于 2012-09-18T17:59:49.210 回答