android - 如何在android中为 GridView 实现onclickevent和ontouchevent

标签 android gridview

我想实现一个 gridview,在其中显示图标,单击这些图标将执行所需的操作。我还想要一个 OnTouchListner。我想实现一个 UI,用户可以在其中单击显示的图像(图标)或滑动menu.But在交互过程中我需要捕捉他的手指 Action 我可以这样实现吗??

//This is the setOnItemClickListener block
gridview.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Log.d("Click Event","Testing");
            Toast.makeText(MainActivity.this, "Image Position = " + position, Toast.LENGTH_SHORT).show();
        }
    });

    gridview.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {//MY CODE  });

修改后:

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        sAcceleration = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
        sPressure = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
        //sArea = mSensorManager.getDefaultSensor(Sensor.TYPE_AREA);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setVerticalSpacing(20);
        gridview.setHorizontalSpacing(20);
        gridview.setNumColumns(4);
        gridview.setStretchMode(3);
        gridview.setAdapter(new ImageAdapter(this));

        gridview.setOnItemClickListener(new GridView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Log.d("Click Event","Testing");
                Toast.makeText(MainActivity.this, "Image Position = " + position, Toast.LENGTH_SHORT).show();
            }
        });

        gridview.setOnTouchListener(new GridView.OnTouchListener(){

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int index = event.getActionIndex();
                int pointerId = event.getPointerId(index);
                int action = MotionEventCompat.getActionMasked(event);

                switch(action) {
                    case (MotionEvent.ACTION_MOVE) :
                        storeData(String.valueOf(event.getRawX()),String.valueOf(event.getRawY()));
                        Log.d(DEBUG_TAG,"Coordinates = (" + String.valueOf(event.getRawX())+ " , "+ String.valueOf(event.getRawY())+ ")");
                        storeData(String.valueOf(event.getSize()),"area");
                        Log.d(DEBUG_TAG,"Area covered = " + event.getSize());
                        storeData(String.valueOf(event.getPressure()),"pressure");
                        Log.d(DEBUG_TAG,"getPressure() = " + event.getPressure());
                        //Log.d(DEBUG_TAG,"Axis Pressure = " + event.AXIS_PRESSURE);

                        return true;
                    case (MotionEvent.ACTION_UP) :
                        storeData(String.valueOf(event.getRawX()),String.valueOf(event.getRawY()));
                        Log.d(DEBUG_TAG,"Coordinates = (" + String.valueOf(event.getRawX())+ " , "+ String.valueOf(event.getRawY())+ ")");
                        storeData(String.valueOf(event.getSize()),"area");
                        Log.d(DEBUG_TAG,"Area covered = " + event.getSize());
                        storeData(String.valueOf(event.getPressure()),"pressure");
                        Log.d(DEBUG_TAG,"getPressure() = " + event.getPressure());
                        //Log.d(DEBUG_TAG,"Axis Pressure = " + event.AXIS_PRESSURE);

                        return true;
                    case (MotionEvent.ACTION_DOWN) :
                        //Toast.makeText(MainActivity.this, "Image Position testing", Toast.LENGTH_SHORT).show();
                        storeData("-100000","-100000");
                        storeData(String.valueOf(event.getRawX()),String.valueOf(event.getRawY()));
                        Log.d(DEBUG_TAG,"Coordinates = (" + String.valueOf(event.getRawX())+ " , "+ String.valueOf(event.getRawY())+ ")");
                        storeData(String.valueOf(event.getSize()),"area");
                        Log.d(DEBUG_TAG,"Area covered = " + event.getSize());
                        storeData(String.valueOf(event.getPressure()),"pressure");
                        Log.d(DEBUG_TAG,"getPressure() = " + event.getPressure());
                        //Log.d(DEBUG_TAG,"Axis Pressure = " + event.AXIS_PRESSURE);

                        return true;
                    case (MotionEvent.ACTION_OUTSIDE) :
                        Log.d(DEBUG_TAG,"Movement occurred outside bounds of current screen element");
                        return true;      
                    default : 
                        return false;
                    }
            }

        });

    }

最佳答案

取自here

your_txtView.setOnClickListener(new TextView.OnClickListener(){
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
});

your_txtView.setOnTouchListener(new TextView.OnTouchListener(){
        @Override
public boolean onTouch(View v, MotionEvent event) {
    if (MotionEvent.ACTION_DOWN == event.getAction()) {

    } else if (MotionEvent.ACTION_UP == event.getAction()) {
        v.performClick();
    }

    return true;
}
});

当然,您可以将 your_txtView 更改为 GridView,并将 TextView.OnTouchListener() 更改为 GridView.OnTouchListener()

关于android - 如何在android中为 GridView 实现onclickevent和ontouchevent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514178/

相关文章:

c# - 访问 gridview 隐藏域

java - Robolectric 测试 gridview onclick 开始新 Activity

android - 尝试设置 Adob​​e 创意 SDK 时无法解析 : com. adobe.creativesdk :image:4. 0.0

android - Android 机器学习库

android - Android:崩溃后是否可以继续 “caller” Activity ?

android - 如何在 Android studio 2.3.3 中更改特定 AVD 的系统镜像? [因为我们无法在此版本上启动独立的 AVD 管理器]

java - 从 GridView 更改项目

c# - Datagridview 不更新/刷新

android - 使用声明为 "intent.extras"对象的空变量初始化 "Bundle"

asp.net - 如何在gridview中绑定(bind)下拉列表?