网格布局中的投掷姿态检测

我想让fling手势检测在我的Android应用程序中工作

我拥有的是一个GridLayout,其中包含9个ImageViews。可以在这里找到来源:Romain Guys的网格布局

我拿的那个文件来自Romain Guy的Photostream应用程序,只是稍微修改了一下

对于简单的点击情况,我只需要为我添加的每个ImageView设置onClickListener,作为实现View.onClickListener的主要活动。实现能够识别放纵行为的东西似乎要复杂得多。我认为这是因为它可能跨越视图

  • 如果我的活动实现
    OnGestureListener我不知道如何
    将其设置为的手势侦听器
    网格图像视图
    加上

    公共类SelectFilterActivity扩展活动实现
    View.OnClickListener,OnTestureListener{。。。
    
  • 如果我的活动实现
    OnTouchListener那么我没有
    onFling方法以覆盖(它具有
    两个事件作为参数允许我
    来确定这次放纵是否
    值得注意)

    公共类SelectFilterActivity扩展活动实现
    View.OnClickListener,OnTouchListener{。。。
    
  • 如果我创建了一个自定义的视图,比如扩展图像视图手势图像视图,我不知道如何告诉该活动视图中发生了投掷。在任何情况下,我都尝试过这个方法,但触摸屏幕时没有调用这些方法

我真的需要一个跨视图工作的具体示例。我应该在什么时候、怎样附加这个侦听器?我还需要能够检测到单次单击

//手势检测
mGestureDetector=新的GestureDetector(这是新的GestureDetector.SimpleOnGestureListener()){
公共布尔onFling(MotionEvent e1、MotionEvent e2、float-velocityX、float-velocityY){
intdx=(int)(e2.getX()-e1.getX());
//如果时间太短,就不要接受
//因为它可能与按钮按下冲突
if(数学abs(dx)>大调&数学abs(velocityX)>数学absvelocityY)){
如果(速度x>0){
moveRight();
}否则{
左移();
}
返回true;
}否则{
返回false;
}
}
});

有没有可能在我的屏幕上方放置一个透明的视图来捕捉放纵

如果我选择不从XML中膨胀我的子图像视图,我可以将手势检测器作为构造函数参数传递给我创建的图像视图的新子类吗

这是一个非常简单的活动,我试图让fling检测为其工作:SelectFilterActivity(改编自photostream)

我一直在寻找这些来源:

  • 检测手势-教程

  • SDK文档

  • 计算器代码

到目前为止,没有什么对我有效,我希望得到一些建议

感谢幕府将军的代码,我根据自己的情况修改了他的代码

让您的活动像往常一样实施OnClickListener

公共类SelectFilterActivity扩展活动实现OnClickListener{
专用静态最终整数滑动距离=120;
专用静态最终整数滑动路径=250;
专用静态最终整数滑动\u阈值\u速度=200;
私人手势检测器;
View.OnTouchListener手势Listener;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/* ... */
//手势检测
gestureDetector=新的gestureDetector(这个,新的MyGestureDetector());
gestureListener=新建视图。OnTouchListener(){
公共布尔onTouch(视图v,运动事件){
返回gestureDetector.onTouchEvent(事件);
}
};
}
类MyGestureDetector扩展了SimpleOnGestureListener{
@凌驾
公共布尔onFling(MotionEvent e1、MotionEvent e2、float-velocityX、float-velocityY){
试一试{
if(Math.abs(e1.getY()-e2.getY())>刷出路径)
返回false;
//从右向左滑动
if(e1.getX()-e2.getX()>滑动\u最小距离&&数学abs(速度x)>滑动\u阈值\u速度){
Toast.makeText(选择FilterActivity.this,“左扫”,Toast.LENGTH\u SHORT.show();
}否则如果(e2.getX()-e1.getX()>滑动\u最小距离&&数学abs(速度x)>滑动\u阈值\u速度){
Toast.makeText(选择FilterActivity.this,“右击”,Toast.LENGTH\u SHORT.show();
}
}捕获(例外e){
//没什么
}
返回false;
}
@凌驾
公共布尔onDown(运动事件e){
返回true;
}
}
}

将手势侦听器连接到添加到主布局的所有视图

//为添加到网格的每个视图执行此操作
setOnClickListener(选择FilterActivity.this);
setOnTouchListener(gestureListener);

当被覆盖的方法被点击时,请敬畏地观察活动的onClick(View v)和手势侦听器的onFling

公共void onClick(视图v){
Filter f=(Filter)v.getTag();
FilterFullscreenActivity.show(this,input,f);
}

“放纵”后的舞蹈是可选的,但受到鼓励

发表评论