我有一个水平多个relativelayout视图的滚动视图...一个用于数据库中的每个记录...以编程方式创建。
我需要确定哪些视图受某些手势影响...点击,双击,左/右滑动。
当然,CLICK我能够得到:
RelativeLayout rlView = new RelativeLayout(this);
rlView.setId(10000+myrecordid);
rlView.setOnClickListener(myviewclick);
和myviewclick:
private View.OnClickListener myviewclick = new View.OnClickListener() {
public void onClick(View v) {
Integer i=v.getId()-10000;
// Do some processing on this view
}
};
根据我在网上找到的内容,我试图通过这种方式获得手势:
rlView.setOnTouchListener(myviewtouch);
使用此代码:
private View.OnTouchListener myviewtouch = new View.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.i("MYLOG","double tap");
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.i("MYLOG","SingleTapConfirmed");
return true;
}
@Override
public void onLongPress(MotionEvent e) {
Log.i("MYLOG","LongPress");
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e1.getX()<e2.getX())
Log.i("MYLOG","Fling Right");
else
Log.i("MYLOG","Fling Left");
return true;
}
});
};
根据MYLOG,我正在根据需要采取适当的姿态。问题是,我不知道如何获取手势所在的视图ID。我知道它位于onTouch
但是调用了gestureDetector.OnTouchEvent
以确定动作...而我现在迷失了。
我在StackOverflow和其他网站上搜索了几个小时...他们都显示了如何确定手势的差异......但是无法找到关于使用我可以使用的多个视图的任何内容。
任何帮助将不胜感激。
答案 0 :(得分:6)
我想我明白了。可能不是最优雅的方式,并且由于以这种方式处理它可能存在其他“问题”,但是现在它可以工作。但如果其他人发现了这个问题,我就是这样解决的:
以下是我修改后的代码的解决方法。我添加了一个名为vTouch
的公共变量:
private View.OnTouchListener myviewtouch = new View.OnTouchListener(){
public View vTouch;
public boolean onTouch(View v, MotionEvent event) {
vTouch=v;
return gestureDetector.onTouchEvent(event);
}
GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
Integer viewId=vTouch.getId();
Log.i("MYLOG","double tap in view: "+viewId);
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Integer viewId=vTouch.getId();
Log.i("MYLOG","SingleTapConfirmed in view: "+viewId);
return true;
}
@Override
public void onLongPress(MotionEvent e) {
Integer viewId=vTouch.getId();
Log.i("MYLOG","LongPress in view: "+viewId);
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Integer viewId=vTouch.getId();
if (e1.getX()<e2.getX())
Log.i("MYLOG","Fling Right in view: "+viewId);
else
Log.i("MYLOG","Fling Left in view: "+viewId);
return true;
}
});
};
通过使用内部公共变量vTouch
,我现在可以在每个手势事件中引用视图,其中需要手势恰好位于“视图”。