精华内容
下载资源
问答
  • 下面我们就以实现手势识别的onFling动作,在CwjView中我们从View类继承,当然大家可以从TextView等更高层的界面中实现触控,感兴趣的朋友可以了解下哈
  • 我看到网上大部分资料,对这个抽象函数的实现都是相当简单的:123456@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {//dosomethingreturnfalse;}这些文章...

    我看到网上大部分资料,对这个抽象函数的实现都是相当简单的:

    1

    2

    3

    4

    5

    6

    @Override

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  float velocityY) {

    //dosomething

    returnfalse;

    }

    这些文章其实能解决的问题只有一个,那就是教你如何能在有手势操作的时候,捕获到这个动作,却没有去分析这个动作。

    其实要真正能分析手势,需要处理好这四个参数MotionEvent e1, MotionEvent e2, float velocityX, float velocityY

    先来看一个例子:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    private int verticalMinDistance = 20;

    private int minVelocity         = 0;

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

    if(e1.getX() - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) {

    // 切换Activity

    // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);

    // startActivity(intent);

    Toast.makeText(this,"向左手势", Toast.LENGTH_SHORT).show();

    }elseif (e2.getX() - e1.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity) {

    // 切换Activity

    // Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);

    // startActivity(intent);

    Toast.makeText(this,"向右手势", Toast.LENGTH_SHORT).show();

    }

    returnfalse;

    }

    OnFling的四个参数意思分别为

    e1: The first down motion event that started the fling.手势起点的移动事件

    e2: The move motion event that triggered the current onFling.当前手势点的移动事件

    velocityX: The velocity of this fling measured in pixels per second along the x axis.每秒x轴方向移动的像素

    velocityY: The velocity of this fling measured in pixels per second along the y axis.每秒y轴方向移动的像素

    说的更简单点就是,鼠标手势相当于一个向量(当然有可能手势是曲线),e1为向量的起点,e2为向量的终点,velocityX为向量水平方向的速度,velocityY为向量垂直方向的速度

    1

    if(e1.getX()

    - e2.getX() > verticalMinDistance && Math.abs(velocityX) > minVelocity)

    则上面的语句能知道啥意思了吧,就是说向量的水平长度(滑了有多长)必须大于verticalMinDistance,并且水平方向速度大于minVelocity。

    从而我们可以如此判断手势是否满足一定的条件从而进行相应响应,也可以根据这个写出更复杂的手势判断。

    虽然我这篇文章不去探究手势操作的基本步凑,但还是有必要谈谈我们的listenner在重载onTouch()这个函数的时候应该思考的问题:

    1

    2

    3

    public

    boolean onTouch(View v, MotionEvent event) {

    returnmGestureDetector.onTouchEvent(event);

    }

    查看GestureDetector类的onTouchEvent的源码就能知道,进入该函数后会进入case MotionEvent.ACTION_UP这个路径,从而调用onFling函数。

    我要说的就是这句话,因为在我看来GestureDetector未必能满足处理所有的手势需求,肯能有那么一天,需要我们抛开GestureDetector   直接在onTouch()里面完成任务。

    展开全文
  • 我设法使onFling和onScroll事件工作(这些事件在侦听器类和Activity中实现).但是每次我进行滑动(onFling)时,onScroll()函数内的代码也会被执行.例如:@Overridepublic boolean onFling(MotionEvent e1, MotionEvent ...

    我正在尝试编写一个检测和处理手势的程序.我设法使onFling和onScroll事件工作(这些事件在侦听器类和Activity中实现).但是每次我进行滑动(onFling)时,onScroll()函数内的代码也会被执行.例如:

    @Override

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

    {

    //do something here, for example change background color to red

    return true;

    }

    @Override

    public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)

    {

    //do something, for example vibrate

    return true;

    }

    在这种情况下,当我滚动设备振动,这没关系.但是当我进行滑动并且onFling被执行时,颜色变为红色,但它也会振动,我不希望这样.

    是否有任何方法可以防止这种情况发生,因此当滑动发生时,只有onFling()事件中的代码被执行而onScroll()仅在滚动真正发生时触发,或者如果没有onScroll(),则处理简单的手指移动和单独滑动手势?

    编辑:我正在使用GestureDetector类.

    展开全文
  • OnFling左右滑动效果

    2013-03-22 17:20:58
    触摸滑动效果,左右滑动,GestureDetector手势监听,ViewPager装左右滑动页面
  • 使用onFling方法,实现滑动切换画面的效果
  • Android onFling无响应

    2021-06-04 10:57:03
    onFling事件之前调用onFling 。 如果在onDown方法中返回false,则运动事件传播将停止。 尝试在onDown方法结束时更改return false , return true 。 在Dev指南的Input Events页面中,有点迟钝地解释了返回值。 ...

    我首先是android新手,所以首先想想任何新手的错误

    我想在我的代码中添加一个fling函数。public class MainGamePanel extends SurfaceView implements SurfaceHolder.Callback, OnGestureListener { private MainThread thread; private Droid droid; private Droid droid2; private static final String TAG = gameView.class.getSimpleName(); private GestureDetector gestureScanner; public MainGamePanel(Context context){ super(context); getHolder().addCallback(this); droid = new Droid(BitmapFactory.decodeResource(getResources(), R.drawable.playerbox2), 270, 300); droid2 = new Droid(BitmapFactory.decodeResource(getResources(), R.drawable.playerbox2), 50, 300); thread = new MainThread(getHolder(), this); setFocusable(true); gestureScanner = new GestureDetector(this); } public boolean onTouchEvent(MotionEvent event){ return gestureScanner.onTouchEvent(event); } @Override protected void onDraw(Canvas canvas){ canvas.drawColor(Color.BLACK); droid.draw(canvas); droid2.draw(canvas); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { droid.setX(50); droid.setY(50); Log.d(TAG, "Coords: x=" + e1.getX() + ",y=" + e2.getY()); return true; } @Override public boolean onDown(MotionEvent e) { droid2.setX((int)e.getX()); droid2.setY((int)e.getY()); Log.d(TAG, "Coords: x=" + e.getX() + ",y=" + e.getY()); return false; }

    我得到了gestureListener:onDown,onLongPress和onShowPress。

    但我无法对onFling,onSingleTapUp和onScroll做出任何回应。

    我犯了什么错误? 它与观点有关吗?

    我不知道看到什么代码有用….所以任何建议都会非常感激。 谢谢!

    在onFling事件之前调用onFling 。 如果在onDown方法中返回false,则运动事件传播将停止。

    尝试在onDown方法结束时更改return false , return true 。

    在Dev指南的Input Events页面中,有点迟钝地解释了返回值。 (在示例代码下方向下滚动以查看)。

    您需要将视图设置为longclickable,如下所示:

    yourView.setLongClickable(true);

    理想情况下,我们不应该…当与View关联时,GestureDetector在与Activity Vs关联时的工作方式不同。 报道已经存在问题.. 点击此处了解更多详情 。

    对我来说,我必须将setLongClickable更改为true。

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment, container, false); view.setLongClickable(true); //

    我尝试将onDown方法的返回值设置为true,但它不起作用。 然后我设置ll_action_menu.setLongClickable(true);

    有效

    展开全文
  • } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if(null==e1){ e1 = mLastOnDownEvent; } if (e1==null || e2==null){ return false; } }

    解决办法:

      定义一个MotionEvent对象,在ondown里面赋值
       private MotionEvent mLastOnDownEvent = null;


           @Override

            public boolean onDown(MotionEvent arg0) {

             mLastOnDownEvent=arg0;
             return false;
           }

         @Override
         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
             if(null==e1){
                e1 = mLastOnDownEvent;
                  }

              if (e1==null || e2==null){
               return false;

             }
          }

     

    展开全文
  • onfling()的使用

    千次阅读 2016-11-02 10:06:12
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (velocityY > 0/* e1.getY()-e2.getY()>0 */) { // 向下 Toast.makeText(MainActivity.this, "用户...
  • onFling()和onSingleTapUp()方法无法触发 datao819 2012-03-21 15:56:10 9375 收藏 分类专栏: 常见问题 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:...
  • 在看了启舰博主的博客之后,发现手势识别器中的实现的onFling是个非常好玩的应用,可以实现屏幕的左右滑动: 简单代码如下: 1,因为左右滑动屏幕较多,特写一个基类public abstract class BaseSetupActivity extends ...
  • "onFling-" + "滑动" ); //手指在触摸屏上迅速移动,并松开的动作。 int mini_width = 120 ; int mini_speed = 0 ; float distance_right = motionEvent1.getX() - motionEvent.getX(); float ...
  • myGallery.onFling(null, null, -2000, 0); 第三个参数,数值是滑动距离 正数时:向左切换, 负数时:向右切换 看源码发现,除了第三个参数其他三个参数都无用 @Override public boolean onFling(MotionEvent e1,...
  • 上执行滑动手势时,我尝试处理行的总线名称('onFling')但是当我这样做时,手势处理正确但我可以获得视图(使用findViewByID())第一排......我需要获得Flinged行的视图!谢谢!这是我的代码......:public class ...
  • 其中的mScroller的参数设置是错误的。mScroller.fling(scrollX, scrollY, -xVelocity, -yVelocity, 0, getWidth() - chileView.getWidth(), 0, getHeight() - chileView.getHeight()); 然后一看自己设置这个最小初始...
  • 我想监听手机Activity滑动事件时,用了OnGestureListener的onFling()方法,发现不来事。 于是一番百度、测试之下,总结出了几点。 1、首先Activity实现OnGestureListener和OnTouchListener接口。 2、在Activity这...
  • 优化onFling()的滑动效果试验

    千次阅读 2016-05-04 14:15:10
    想要做一个向左右滑动滚动的效果,虽然知道用onFling()这一个方法效果不太好,但是想要动手实现一下。 为了方便我们判断滑动动作,安卓给了我们一个叫做GestureDetector(手势识别器)的东西。 首先我们要在要使用...
  • OnFling的四个参数意思分别为 e1: The first down motion event that started the fling.手势起点的移动事件e2: The move motion event that triggered the current onFling.当前手势点的移动事件velocityX: The ...
  • 实现Fragment滑动onFling的手势识别

    千次阅读 2016-10-14 11:59:39
    //此方法必须重写且返回真,否则onFling不起效 public boolean onDown ( MotionEvent e ) { return true ; } @Override public boolean onFling ( MotionEvent e1, MotionEvent e2, float ...
  • 我们来试着做一个onFling()事件的处理吧,onFling()方法中每一个参数的意义我写在注释中了,需要注意的是Fling事件的处理代 码中,除了第一个触发Fling的ACTION_DOWN和最后一个ACTION_MOVE中包含的坐标等信息外,...
  • Android-App-MotionGestures Android应用程式可显示动作手势的用法,例如onFling,onLongPress等
  • 使用SimpleOnGestureListener监听手势时拖动操作不触发onFling()方法,不了解是怎么回事,抛的那种操作时会触发onFling()的
  • 在手势检测中,onFling()与onScroll()有点类似,一个为“滑动”,一个为“拖动”。都是手指在屏幕(或某一组件)上移动一段距离后触发。  然而二者毕竟是有区别的:(下面结论是在我自己的demo中亲自操作得出的...
  • 日志表现出:startFling()方法先后在onFling()和onTouch()调用。按照逻辑来说,在onFling()中调用了,即使在onTouch()方法中调用也不会再执行。11-01 16:09:55.147: D/WatchTvFragment(1026): ++...
  • public boolean onFling(MotionEvent startEvent, MotionEvent endEvent, float velocityX, float velocityY) { // TODO Auto-generated method stub if (startEvent.getY() - endEvent.getY() > 100) { Toast....
  • 在手势检测中,onFling()与onScroll()有点类似,一个为“滑动”,一个为“拖动”。都是手指在屏幕(或某一组件)上移动一段距离后触发。 然而二者毕竟是有区别的:(下面结论是在我自己的demo中亲自操作得出的结果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,859
精华内容 2,743
关键字:

onfling