初学ViewDragHelper
来源:互联网 发布:女明星淘宝店铺大全 编辑:程序博客网 时间:2024/05/22 06:49
使用ViewDragHelper来实现类似QQ侧滑效果,赞!!!
在自定义的ViewGroup里初始化ViewDragHelper
DragViewGroup.java
package com.example.day0118;import android.content.Context;import android.support.v4.view.ViewCompat;import android.support.v4.widget.ViewDragHelper;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.FrameLayout;public class DragViewGroup extends FrameLayout{ private View mMenuView,mMainView; private ViewDragHelper mViewDragHelper; public DragViewGroup(Context context, AttributeSet attrs) { super(context, attrs); mViewDragHelper = ViewDragHelper.create(this, callback);//通过其静态工厂方法进行初始化 } @Override protected void onFinishInflate() { super.onFinishInflate(); mMenuView = getChildAt(0); mMainView = getChildAt(1); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return mViewDragHelper.shouldInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { mViewDragHelper.processTouchEvent(event);//将触摸事件传递给ViewDragHeleper,此操作必不可少 return true; } @Override public void computeScroll() { if (mViewDragHelper.continueSettling(true)) { //回弹的时候调用 ViewCompat.postInvalidateOnAnimation(DragViewGroup.this); } } private ViewDragHelper.Callback callback = new ViewDragHelper.Callback() { //何时开始检测触摸事件 //指定哪个childView可拖动 @Override public boolean tryCaptureView(View arg0, int arg1) { //如果当前触摸的child是mMainView 时开始检测 return mMainView == arg0 || mMenuView == arg0; //return mMainView == arg0 || mMenuView == arg0;这样就2个View都可以拖拉 } //处理垂直滑动 @Override public int clampViewPositionVertical(View child, int top, int dy) { //返回0则在该方向不滑动 return 0; }; //处理水平滑动 @Override public int clampViewPositionHorizontal(View child, int left, int dx) { //手指拖动的时候调用这个方法 return left; }; //拖动结束后调用 @Override public void onViewReleased(View releasedChild, float xvel, float yvel) { //手指抬起后缓缓移动到指定位置 //这里300指的是px //若将mMainView改为releasedChild是一样的效果,releasedChild为拖拉的view if (mMainView.getLeft() < 300) { //关闭菜单 //相当于Scroller的startScroll方法 mViewDragHelper.smoothSlideViewTo(mMainView, 0, 0); ViewCompat.postInvalidateOnAnimation(DragViewGroup.this); } else { //打开菜单 mViewDragHelper.smoothSlideViewTo(mMainView, 300, 0); ViewCompat.postInvalidateOnAnimation(DragViewGroup.this); } }; };}
xml
<com.example.day0118.DragViewGroup android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:layout_width="300px" android:layout_height="match_parent" android:background="#333" android:text="菜单" android:textColor="#fff"/> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:background="#B22222" android:text="主页" android:textColor="#fff"/></com.example.day0118.DragViewGroup>
效果
0 0
- 初学ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper
- ViewDragHelper详解
- ViewDragHelper详解
- ViewDragHelper详解
- Android: ViewDragHelper
- ViewDragHelper入门
- ViewDragHelper 使用
- ViewDragHelper详解
- Mockplus原型交互跟我做之2- 旋转的风车
- 第一篇 在Android在打包APK时报warning
- uva156
- JVM分析工具链(一) - jps和jstack
- UITextView 限制输入文本长度
- 初学ViewDragHelper
- Java学习笔记(80)-----------并发容器之ConcurrentHashMap
- Mockplus原型交互跟我做之3 - 认识“链接点”
- audio_coding模块分析和audio_conference_mixer模块分析
- 异常初探(一)
- codeforces #339 div1 A 扫雪面积
- hdu 5602 Black Jack
- 自适应高度
- 邮件破译