Pet*_*ter 8 android view gesture
我有一个水平多个relativelayout视图的滚动视图...一个数据库中的每个记录...一个以编程方式创建.
我需要确定哪些视图受某些手势影响...单击,双击和左/右滑动.
当然点击我能够得到:
RelativeLayout rlView = new RelativeLayout(this);
rlView.setId(10000+myrecordid);
rlView.setOnClickListener(myviewclick);
Run Code Online (Sandbox Code Playgroud)
和myviewclick:
private View.OnClickListener myviewclick = new View.OnClickListener() {
public void onClick(View v) {
Integer i=v.getId()-10000;
// Do some processing on this view
}
};
Run Code Online (Sandbox Code Playgroud)
从我在网上找到的,我试图通过这种方式获得手势:
rlView.setOnTouchListener(myviewtouch);
Run Code Online (Sandbox Code Playgroud)
使用此代码:
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;
}
});
};
Run Code Online (Sandbox Code Playgroud)
根据MYLOG,我正在根据需要采取适当的姿态.问题是,我不知道如何获取手势所在的视图ID.我知道它是在onTouch
但是调用了gestureDetector.OnTouchEvent
确定动作......我在这一点上迷失了.
我在StackOverflow和其他网站上搜索了几个小时...他们都显示了如何确定手势的差异......但是无法找到关于使用多个视图的任何内容,我可以使用它.
任何帮助,将不胜感激.
我想我明白了.可能不是最优雅的方式,并且由于以这种方式处理它可能存在其他"问题",但是现在它可以工作.但如果其他人发现这个问题,我就是这样解决的:
以下是我修改过的代码的解决方法.我添加了一个名为的公共变量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;
}
});
};
Run Code Online (Sandbox Code Playgroud)
通过使用内部公共变量,vTouch
我现在可以引用每个手势事件中的视图,其中需要手势恰好在其中的"视图".
归档时间: |
|
查看次数: |
564 次 |
最近记录: |