`

VelocityTracker计算触摸移动速度

 
阅读更多

 

作用:帮助去跟踪屏幕上的flinging事件,个人认为可能就是手指的触摸移动事件

使用方法:1 调用 VelocityTracker  mVelocityTracker =  VelocityTracker.obtain();   实例化对象 

           2  调用 mVelocityTracker.addMovement(event);   ,为对象添加监听的事件 

           3 调用 mVelocityTracker.computeCurrentVelocity(1, (float)0.01);  计算速度 

           4 mVelocityTracker.getXVelocity( );   和 mVelocityTracker.getYVelocity( );  计算X和Y的速度(可以传递参数来指定移动对象)

            5 使用结束调用 mVelocityTracker.clear();   和 mVelocityTracker.recycle();  来清理对象

 

测试代码: 

 

public class VelocityTrackerTestActivity extends Activity {

	private TextView mInfo;  
	  
    private VelocityTracker mVelocityTracker;  
    private int mMaxVelocity;  
  
    private int mPointerId;  
 
	
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.velocity_trackerl );
		
		mInfo = (TextView) findViewById( R.id.text);
		
//	    mInfo = new TextView(this);  
//        mInfo.setLines(4);  
//        mInfo.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
//        mInfo.setTextColor(Color.WHITE);  
  
//        this.addContentView(mInfo , null);
       // setContentView(mInfo);  
  
        mMaxVelocity = ViewConfiguration.get(this).getMaximumFlingVelocity();  
        
		 
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		final int action = event.getAction();
		 acquireVelocityTracker(event);  
		  switch (action) {  
          case MotionEvent.ACTION_DOWN:  
              //求第一个触点的id, 此时可能有多个触点,但至少一个  
              mPointerId = event.getPointerId(0);  
              break;  

          case MotionEvent.ACTION_MOVE:  
              //求伪瞬时速度  
//        	  mVelocityTracker.computeCurrentVelocity(1000, mMaxVelocity);  
        	  mVelocityTracker.computeCurrentVelocity(1, (float)0.01); 
              final float velocityX = mVelocityTracker.getXVelocity(mPointerId);  
              final float velocityY = mVelocityTracker.getYVelocity(mPointerId);  
              recodeInfo(velocityX, velocityY);  
              break;  

          case MotionEvent.ACTION_UP:  
              releaseVelocityTracker();  
              break;  

          case MotionEvent.ACTION_CANCEL:  
              releaseVelocityTracker();  
              break;  

          default:  
              break;  
      }  
      return super.onTouchEvent(event);  	
	}
	
	
	
	
    private void acquireVelocityTracker(final MotionEvent event) {  
        if(null == mVelocityTracker) {  
            mVelocityTracker = VelocityTracker.obtain();  
        }  
        mVelocityTracker.addMovement(event);  
    }  
    

    /**  
     * 释放VelocityTracker  
     *  
     * @see android.view.VelocityTracker#clear()  
     * @see android.view.VelocityTracker#recycle()  
     */  
    private void releaseVelocityTracker() {  
        if(null != mVelocityTracker) {  
            mVelocityTracker.clear();  
            mVelocityTracker.recycle();  
            mVelocityTracker = null;  
        }  
    }  
  
    private static final String sFormatStr = "velocityX=%f\nvelocityY=%f";  
  
    /**  
     * 记录当前速度  
     *  
     * @param velocityX x轴速度  
     * @param velocityY y轴速度  
     */  
    private void recodeInfo(final float velocityX, final float velocityY) {  
        final String info = String.format(sFormatStr, velocityX, velocityY);  
        mInfo.setText(info);  
    }  
    
    
    
}

   

2   xml

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:gravity="top" 
    android:orientation="vertical" >
     
     <TextView
       android:id="@+id/text"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_margin="1dp"
       android:text="富字体样式"/>
 
            
</LinearLayout>

 

分享到:
评论

相关推荐

    android velocityTracker滑动速度检测器简单使用

    VelocityTracker是Android提供的一个类,它能够收集和计算触摸事件的移动速度。通过调用其addMovement()方法,我们可以将MotionEvent中的位置变化传递给VelocityTracker,然后使用computeCurrentVelocity()来获取...

    Android获取在屏幕滑动速度的实例

    首先,VelocityTracker是Android提供的一个工具类,用于追踪和计算一段时间内手指在屏幕上移动的速度。它能够帮助开发者获取滑动事件的平均速度和峰值速度,这对于滑动手势的处理至关重要。 要使用VelocityTracker...

    详细讲解自定义ViewGroup+Scroller+VelocityTracker做出Launcher滑动

    VelocityTracker则用于追踪手指在屏幕上移动的速度。在触摸事件(MotionEvent)处理中,我们可以addMovement()方法添加MotionEvent,然后在ACTION_UP事件中调用computeCurrentVelocity()获取手指离开屏幕时的速度。...

    android自定义布局中的平滑移动

    `VelocityTracker`用于跟踪和计算手势的速度,从而得到初始速度。`Scroller`则根据初始速度和边界条件(如最大最小速度限制)来计算滑动的轨迹。`ViewConfiguration`提供了与设备相关的触摸和滑动配置,如最小滑动...

    L14-ViewGroup 的触摸反馈、ViewPager 和拖拽-讲义.pdf

    VelocityTracker是Android提供的一个类,用于计算手指在屏幕上移动的速度。在处理自定义触摸事件时,如果GestureDetector不能满足需求,可以利用VelocityTracker。通过以下步骤使用VelocityTracker: - 在ACTION_...

    安卓自定义控件相关-android实现滑动控制速度控制各种布局自定义组件.rar

    开发者可能需要重写onTouchEvent()方法来处理触摸事件,通过计算手指移动的距离来驱动内容的滚动。此外,滑动速度的控制可以通过记录手指移动的速度并设置相应的减速或者加速策略来实现。例如,可以计算相邻两个时间...

    android 两点左右上下倾斜全方位滑动

    当用户在屏幕上触摸时,系统会生成一系列的MotionEvent事件,包括ACTION_DOWN(触摸开始)、ACTION_MOVE(触摸移动)和ACTION_UP(触摸结束)等。 对于两点滑动,我们需要监听ACTION_DOWN和ACTION_MOVE事件。在...

    自定义Android可滑动控件源码

    VelocityTracker是Android提供的另一个关键工具,用于追踪和分析触摸事件的速度。在ACTION_MOVE事件中,我们可以添加轨迹点到VelocityTracker,并通过`computeCurrentVelocity()`方法获取手指滑动的速度。这在实现...

    launcher2 pagedview 分析

    在滑动过程中,`PagedView`会持续跟踪并计算手指的移动速度,这有助于平滑的页面切换动画。 在滑动过程中,`PagedView`会利用`VelocityTracker`来测量手指移动的速度,这个速度信息在决定何时结束滑动和页面切换时...

    Android ListView实现仿iPhone实现左滑删除按钮的简单实例

    此外,为了提供良好的用户体验,我们需要在用户停止滑动后,通过VelocityTracker计算出手指的释放速度,如果速度超过了设定阈值,可以添加一个回弹动画,使被滑动的item恢复到原始位置。如果不满足条件,则保持当前...

    android手势翻页效果

    `Scroller`用于计算动画的持续时间和滚动距离,而`VelocityTracker`则记录手指滑动的速度,这两者结合可以创建出平滑的翻页动画。 要实现"android手势翻页效果",你需要做以下步骤: 1. 创建一个自定义的`View`...

    View拖拽.zip

    此外,Android的VelocityTracker类可以帮助我们获取手指移动的速度,从而实现更自然的惯性效果。 总的来说,"View拖拽"是一个涉及到用户交互的重要话题。通过理解和实践这个"View拖拽.zip"压缩包中的CardView示例,...

    RenRenSlideMenuDemo.zip

    * 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。 * * @param event * content界面的滑动事件 */ private void createVelocityTracker(MotionEvent event) { if...

    ScrollViews上下左右滑动

    在Android开发中,ScrollView是常用的布局控件,它允许用户滚动查看超过屏幕大小的内容。当一个布局中的内容高度或宽度超过了...在实现过程中,关键在于正确处理触摸事件并计算滑动方向,从而实现多方向的滚动操作。

    详解Android中实现ListView左右滑动删除条目的方法

    根据VelocityTracker计算出的速率,判断是返回原位还是删除条目。如果速度超过SNAP_VELOCITY,且方向满足删除条件,则执行删除操作。 6. **动画效果**: 当决定删除条目时,可以通过Scroller的startScroll()方法,...

    Android程序研发源码Android 仿UC,墨迹天气左右拖动多屏幕显示效果源码.rar

    这两个类可以帮助我们计算出滑动结束后的速度,进而模拟出物体在物理世界中的惯性效果。 4. **动画效果**:在滑动过程中,可以使用Android的ViewPropertyAnimator或Animation类来添加平滑的过渡动画。这不仅可以使...

    Android利用滑动菜单框架实现滑动菜单效果

    通过`VelocityTracker`,我们可以计算手指滑动的速度,判断是否达到了设定的`SNAP_VELOCITY`值,以决定菜单是否自动滑动到完全显示或隐藏的位置。 为了方便在Activity中使用这个滑动菜单框架,我们只需在布局XML...

    Android仿天天动听歌曲自动滚动view

    - 当用户松开手指时,通过`mVelocityTracker`计算滑动速度,根据速度决定滚动多少行。 - 使用`postDelayed()`方法来实现定时滚动,每次滚动一行,更新`index`并重绘视图。 6. **触摸事件处理**: - 在`...

    Android自定义ViewPager实例

    在`MotionEvent.ACTION_DOWN`时记录初始触碰位置,`ACTION_MOVE`时计算移动距离并调用`scrollBy()`平滑滚动,`ACTION_UP`时根据手指滑动速度决定向左或向右切换页面。 3. 滑动速度检测: 使用`VelocityTracker`来...

    Android实现图片滚动和页签控件功能的实现代码

    11. **mVelocityTracker**: 通过VelocityTracker类计算手指滑动的速度。 在构造函数中,我们初始化了这些变量,并准备接受来自XML布局的引用。`scrollToNext()`和`scrollToPrevious()`方法用于手动触发图片的滚动,...

Global site tag (gtag.js) - Google Analytics