使用ViewDragHelp实现ImageView拖动超过屏幕1/2回到屏幕左边,否则到右边,还有一个就是还能实现点击的效果
来源:互联网 发布:太原java培训机构 编辑:程序博客网 时间:2024/06/05 06:50
首先,来看看效果图
完成如上效果主要需要一个类
public class DragView extends LinearLayout { private ViewDragHelper mViewDragHelper; private Point initPoint; private View autoTextView; public DragView(Context context, AttributeSet attrs) { super(context, attrs); initDragHelper(); } private void initDragHelper() { mViewDragHelper = ViewDragHelper.create(DragView.this, 1.0f, mDragCallback); initPoint = new Point(); } /** * ViewDragHelper回调接口 */ private ViewDragHelper.Callback mDragCallback = new ViewDragHelper.Callback() { @Override public boolean tryCaptureView(View child, int pointerId) { return true; } @Override public int clampViewPositionHorizontal(View child, int left, int dx) {// 水平拖动 final int leftPadding = getPaddingLeft(); final int rightPadding = getWidth() - child.getWidth() - leftPadding; final int newLeft = Math.min(Math.max(left, leftPadding), rightPadding); return newLeft; } @Override public int clampViewPositionVertical(View child, int top, int dy) {//竖直拖动 final int topPadding = getPaddingTop(); final int bottomPadding = getHeight() - child.getHeight() - topPadding; final int newTop = Math.min(Math.max(top, topPadding), bottomPadding); return newTop; } @Override public void onViewReleased(View releasedChild, float xvel, float yvel) {//拖动结束后 super.onViewReleased(releasedChild, xvel, yvel); if (releasedChild == autoTextView && releasedChild.getLeft() < (getWidth()/2)){ mViewDragHelper.smoothSlideViewTo(releasedChild,initPoint.x,initPoint.y);//平滑移动 ViewCompat.postInvalidateOnAnimation(DragView.this); } } }; @Override public boolean onInterceptHoverEvent(MotionEvent event) {//拦截事件 return mViewDragHelper.shouldInterceptTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) {//消费事件 mViewDragHelper.processTouchEvent(event); return true; } @Override public void computeScroll() { super.computeScroll(); if (mViewDragHelper.continueSettling(true)) {//不停计算位置后,自动移动 ViewCompat.postInvalidateOnAnimation(DragView.this);//重新绘制 } } /** * 完成解析布局xml文件 */ @Override protected void onFinishInflate() { super.onFinishInflate(); autoTextView = getChildAt(0); } /** * 布局 */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); initPoint.x = autoTextView.getLeft(); initPoint.y = autoTextView.getTop(); }}
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView iv=(ImageView)findViewById(R.id.iv); iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "点击了该图标", Toast.LENGTH_SHORT).show(); } }); }
<?xml version="1.0" encoding="utf-8"?><com.jhy.test4.DragView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:src="@mipmap/ic_launcher_round" android:layout_marginRight="5dp" android:layout_marginTop="250dp" android:padding="1dp"/></com.jhy.test4.DragView>
然后就大功告成了
源码下载地址:http://download.csdn.net/detail/k2514091675/9900149
阅读全文
0 0
- 使用ViewDragHelp实现ImageView拖动超过屏幕1/2回到屏幕左边,否则到右边,还有一个就是还能实现点击的效果
- 就是左边是一个FRAME,右边也是一个FRAME,两个之间有分隔线,在分隔线上可以设一个小图标,一点击左边的FRAME就缩进去了,整个屏幕都显示右边的那个FRAME
- 横向滑动ViewGoup(左边菜单右边内容)效果的实现
- 左边添加项到右边的JS实现
- 平移动画,点击某个控件让一个view收缩到右边屏幕,再点击展开。
- 屏幕滑动效果的实现
- 屏幕震动的效果实现
- 实现一个左边宽度固定,右边自适应
- 备忘篇——jquery实现将左边的元素添加到右边后,在右边点击添加的元素却没反应
- 使用JS实现一个匀速回到顶部的效果
- 能实现把一个数组元素中的奇数放左边,偶数放右边
- 自定义控件实现imageview的点击效果
- html实现一个类似屏幕解锁的效果
- 实现黑客帝国屏幕效果
- quick-cocos2d-x(lua) 拖动精灵使其在屏幕移动的效果实现
- 简单实现左右两个listview联动,点击左边切换右边
- 使用JS实现类似屏幕保护效果
- 使用ViewFlipper实现屏幕切换动画效果
- Matlab如何在同一行中混合显示字符串和数值变量
- 笔记本安装Linux双系统WIFI无法使用
- Win10更改搜索框提示文字的方法!win10修改 搜索Web 和Windows文字的方法!
- RUBY易忘语法速查
- spring中pagehelp的使用方法
- 使用ViewDragHelp实现ImageView拖动超过屏幕1/2回到屏幕左边,否则到右边,还有一个就是还能实现点击的效果
- UE4中的世界光照如何设置?
- day03之判断链表带环以及求环的长度及环的入口点+一个类不能被继承及只能分别在栈堆上创建对象
- 0716 POJ1222 EXTENDED LIGHTS OUT
- Java WebService简单实例
- HDU2098_分拆素数和
- SolidWorks参数化设计中Excel的应用
- Android沉浸式状态栏
- myEclipse2017添加tomcat服务器