您的位置:首页 > 移动开发 > Android开发

Android V4 包下的ViewDragHelper学习.

2015-07-07 15:49 393 查看
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;
}
}

不得不说你可以通过该类实现任意拖拽,实现很多非常炫酷的效果.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: