ViewDragHelper是Google最新V4包下一个算是比较隐藏的帮助类,不过在sdk--->simple-->ui.里面可以找到.也是最近才发现的这个
我的开发环境:Android Studio 1.2.1.1 编译SDK版本为:API 16
首先ViewDragHelper是可以拖拽任意VIewGruop下的子View,同样ViewDragHelper提供了一些平滑滚动的API给开发者提供了方便.话不多说,先看我的XML.
<com.softtanck.viewdraghelperdemo.view.MyViewDrag xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </com.softtanck.viewdraghelperdemo.view.MyViewDrag>MyViewDrag是我自定义的.继承了FrameLayout,具体代码如下:
package com.softtanck.viewdraghelperdemo.view; import android.content.Context; import android.support.v4.widget.ViewDragHelper; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; /** * @Descrption : TODO: * @CreateDate :【ViewDragHelperDemo】 - 2015/7/7. * @Author : Tanck. * @Version : 1.0 */ public class MyViewDrag extends FrameLayout { /** * 敏感度 */ private float msensitivity = 1.0f; private ViewDragHelper mViewDragHelper; public MyViewDrag(Context context) { this(context, null); } public MyViewDrag(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyViewDrag(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } /** * 初始化布局 */ private void initView() { mViewDragHelper = ViewDragHelper.create(this, msensitivity, new MyViewDragHelperCallBack()); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } /** * CallBack */ private class MyViewDragHelperCallBack extends ViewDragHelper.Callback { /** * 是否捕获该View的触摸 * @param view * @param i * @return */ @Override public boolean tryCaptureView(View view, int i) { return true; } @Override public int clampViewPositionHorizontal(View child, int left, int dx) { return left; } @Override public int clampViewPositionVertical(View child, int top, int dy) { return top; } } /** * 交给ViewDragHelper去处理 * @param ev * @return */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return mViewDragHelper.shouldInterceptTouchEvent(ev); } /** * 交给ViewDragHelper去处理 * @param event * @return */ @Override public boolean onTouchEvent(MotionEvent event) { try { mViewDragHelper.processTouchEvent(event); } catch (Exception e) { e.printStackTrace(); } return true; } }
不得不说你可以通过该类实现任意拖拽,实现很多非常炫酷的效果.