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;
}
}
不得不说你可以通过该类实现任意拖拽,实现很多非常炫酷的效果.
我的开发环境: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;
}
}
不得不说你可以通过该类实现任意拖拽,实现很多非常炫酷的效果.
相关文章推荐
- 【转载】Android 内存溢出如何发生的。
- Android train——基本组件LinearLayout、EditText、Button
- AndroidManifest.xml——permission
- android加载本地和网上照片
- migrate android code
- Androidstudio配置本地Gradle
- Android开发之EditText属性详解
- 打印android key的信息
- Android:解决重复打开界面问题
- Android动画中属性fillafter和fillbefore的正确理解
- Android学习——在线查看android源代码的3种方式
- Android studio 获取 sh1和MD5
- EditText 动态切换密码 更改为"*"
- android关于EditText与其光标
- Android开源插件工具DL(dynamic-load-apk)学习心得
- Android GPS学习笔记—GpsLP初始化
- Please ensure that adb is correctly located at 'D:\android-sdk-windows\platform-tools\adb.exe' and c
- android:duplicateParentState
- Android Accessibility API的研究与应用(一)
- Android 图片缓存处理