DragView(二)
来源:互联网 发布:雅思大作文 知乎 编辑:程序博客网 时间:2024/06/05 09:13
传承者(Inheritors)打造共同进步生态圈!!!
转载:
http://blog.csdn.net/lmj623565791/article/details/46858663
三段论:声明属性,自定义view,调用
public class CustomViewGroup3 extends LinearLayout { private ViewDragHelper mViewDragHelper; private View mDragView,mAutoBackView,mEdgeTrackerView; private Point mAutoBackOriginPos = new Point(); public CustomViewGroup3(Context context) { this(context,null); } public CustomViewGroup3(Context context, AttributeSet attrs) { super(context, attrs); mViewDragHelper = ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback() { @Override public boolean tryCaptureView(View child, int pointerId) { //mEdgeTrakerView禁止直接移动 return child == mDragView || child == mAutoBackView; } @Override public int clampViewPositionVertical(View child, int top, int dy) { return top; } @Override public int clampViewPositionHorizontal(View child, int left, int dx) { return left; } //当View被释放的时候调用 @Override public void onViewReleased(View releasedChild, float xvel, float yvel) { //手释放view自动回去 if(releasedChild == mAutoBackView){ mViewDragHelper.settleCapturedViewAt(mAutoBackOriginPos.x, mAutoBackOriginPos.y); invalidate(); } } //边界拖动时回调 @Override public void onEdgeDragStarted(int edgeFlags, int pointerId) { mViewDragHelper.captureChildView(mEdgeTrackerView,pointerId); } }); mViewDragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_ALL); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return mViewDragHelper.shouldInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { mViewDragHelper.processTouchEvent(event); return true; } @Override public void computeScroll() {// super.computeScroll(); if(mViewDragHelper.continueSettling(true)){ invalidate(); } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); mAutoBackOriginPos.x = mAutoBackView.getLeft(); mAutoBackOriginPos.y = mAutoBackView.getTop(); } @Override protected void onFinishInflate() { super.onFinishInflate(); mDragView =getChildAt(0); mAutoBackView = getChildAt(1); mEdgeTrackerView = getChildAt(2); }}
调用
<com.example.administrator.testapplication.CustomViewGroup3 xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_margin="10dp" android:gravity="center" android:layout_gravity="center" android:background="#44ff0000" android:text="I can be dragged !" android:layout_width="100dp" android:layout_height="100dp"/> <TextView android:layout_margin="10dp" android:layout_gravity="center" android:gravity="center" android:background="#44ff0000" android:text="I will back !" android:layout_width="100dp" android:layout_height="100dp"/> <TextView android:layout_margin="10dp" android:layout_gravity="center" android:gravity="center" android:background="#44ff0000" android:text="use edge tracker me !" android:layout_width="100dp" android:layout_height="100dp"/></com.example.administrator.testapplication.CustomViewGroup3>
效果:
0 0
- DragView(二)
- DragView(一)
- Android随手指移动的DragView(二)——移动DragView
- Android 自定义View--DragView
- dragView一些知识 -未完成状态
- Android 自定义View基础(五)--DragView
- Android随手指移动的DragView(一)——获取偏移量
- dragView 可以在屏幕拖拽并且弹出菜单的控件
- (二)
- (二):基二FFT
- 凤凰涅磐(二十-二十五)
- 凤凰涅磐(二十六-二十七)
- 软件中的八二原则(二)
- 二 迭代器(二)相关辅助函数
- 二.Java编程基础(二)
- java提高篇(二二)-----LinkedList
- java提高篇(二二)-----LinkedList
- 黑客编程入门(二。二)
- android全局获取Context的技巧
- SVM支持向量机(1)之基本概念
- 编程小练习
- 计算机程序的构造和解释 练习 2.1
- ThreadLocal用法理解
- DragView(二)
- BCM56445流量统计功能开发总结
- Asp.Net MVC学习笔记(一)谨记点
- 栏目跳转 用iframe加载页面 ajax加载页面在div中
- SSL peer certificate or SSH remote key was not OK
- 【codeforce】-#669A-Little Artem and Presents(数学,找规律)
- 编程小练习
- Tomcat提示指定的服务未安装Unable to open the service 'tomcat'
- 欢迎使用CSDN-markdown编辑器