我想实现一个 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/