5

我怀疑在特定按钮或图像视图或视图上实现的点击监听器?因为我浏览的网站只显示整个布局,我希望在点击视图时执行我的操作。请帮忙。谢谢你。

4

4 回答 4

11

任何视图都可以设置onClickListener()为视图类的一部分。最简单的方法是在onCreate()方法中设置对视图的引用。这是图像视图的示例:

ImageView iv = (ImageView) findViewByID(R.id.example);
iv.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // Do what you need to do on click
        ....
    }
});

更新:双击

这是一个在图像视图上实现基本双击检测的示例活动:

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class DoubleTapActivity extends Activity {
    //Set the double tap delay in milliseconds
    protected static final long DOUBLE_CLICK_MAX_DELAY = 1000L;
    private ImageView iView;
    private long thisTime = 0;
    private long prevTime = 0;
    private boolean firstTap = true;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        iView = (ImageView)findViewById(R.id.iView);
        iView.setOnTouchListener( new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if(firstTap){
                    thisTime = SystemClock.uptimeMillis();
                    firstTap = false;
                }
                else
                {
                    prevTime = thisTime;
                    thisTime = SystemClock.uptimeMillis();

                    //Check that thisTime is greater than prevTime
                    //just incase system clock reset to zero
                    if(thisTime > prevTime){

                        //Check if times are within our max delay
                        if((thisTime - prevTime) <= DOUBLE_CLICK_MAX_DELAY){

                            //We have detected a double tap!
                            Toast.makeText(DoubleTapActivity.this, "DOUBLE TAP DETECTED!!!", Toast.LENGTH_LONG).show();
                            //PUT YOUR LOGIC HERE!!!!

                        }
                        else 
                        {
                            //Otherwise Reset firstTap
                            firstTap = true;
                        }
                    }
                    else 
                    {
                        firstTap = true;
                    }
                }
                return false;
            }
        });
    }
}
于 2011-07-16T08:40:50.053 回答
2

主要是为了感知你必须GestureDetector.OnGestureListener在你的活动中实现的点击事件。onSingleTapUp(MotionEvent e)您可以使用的方法执行操作GestureDetector.OnGestureListener

一般对于Button控件,我们使用like

myButton.setOnClickListener(new OnClickListener() {});

或其他 clickListners 和点击事件用于 ImageView 或任何其他自定义视图。

于 2011-07-16T08:26:55.283 回答
1

添加android:onClick="tapEvent"您想要点击的布局。通过更改该MAX_TAP_COUNT值,您可以使用任意数量的抽头。

private long thisTime = 0;
private long prevTime = 0;
private int tapCount = 0;
private static  final int MAX_TAP_COUNT = 5;
protected static final long DOUBLE_CLICK_MAX_DELAY = 500;


public void tapEvent(View v){

    if (SystemClock.uptimeMillis() > thisTime) {
        if ((SystemClock.uptimeMillis() - thisTime) > DOUBLE_CLICK_MAX_DELAY * MAX_TAP_COUNT) {
            Log.d(TAG, "touch event " + "resetting tapCount = 0");
            tapCount = 0;
        }
        if (tapCount()) {
           //DO YOUR LOGIC HERE
        }
    }
}

private Boolean tapCount(){

    if (tapCount == 0) {
        thisTime = SystemClock.uptimeMillis();
        tapCount++;
    } else if (tapCount < (MAX_TAP_COUNT-1)) {
        tapCount++;
    } else {
        prevTime = thisTime;
        thisTime = SystemClock.uptimeMillis();

        //just incase system clock reset to zero
        if (thisTime > prevTime) {

            //Check if times are within our max delay
            if ((thisTime - prevTime) <= DOUBLE_CLICK_MAX_DELAY * MAX_TAP_COUNT) {
                //We have detected a multiple continuous tap!
                //Once receive multiple tap, reset tap count to zero for consider next tap as new start
                tapCount = 0;
                return true;
            } else {
                //Otherwise Reset tapCount
                tapCount = 0;
            }
        } else {
            tapCount = 0;
        }
    }
    return false;

}
于 2017-03-20T05:27:28.987 回答
0
@Override
public boolean onTouchEvent(MotionEvent event) {

    // on action down do your work...
    return super.onTouchEvent(event);
}
于 2014-09-29T14:02:24.073 回答