Android中实现view可以滑动的六种技巧
发布时间:2021-12-10 19:09:38 所属栏目:教程 来源:互联网
导读:在Android开发中,经常会遇到一个view需要它能够支持滑动的需求。今天就来总结实现其滑动的六种方法。其实每一种方法的思路都是一样的,即:监听手势触摸的坐标来实现view坐标的变化,从而实现view的滑动效果。 一、通过Layout方法来实现滑动 如果你将滑动后
在Android开发中,经常会遇到一个view需要它能够支持滑动的需求。今天就来总结实现其滑动的六种方法。其实每一种方法的思路都是一样的,即:监听手势触摸的坐标来实现view坐标的变化,从而实现view的滑动效果。 一、通过Layout方法来实现滑动 如果你将滑动后的目标位置的坐标传递给Layout,这样子就会把view的位置给重新布置了一下,在视觉上就是view的一个滑动的效果。 这就是利用Layout方法实现滑动的核心思路。我们来看一下代码: 新建项目,然后自定义一个view,代码如下: package com.example.testdragview; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; public class DragView extends View{ private int lastX; private int lastY; public DragView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public DragView(Context context, AttributeSet attrs) { super(context, attrs); } public DragView(Context context) { super(context); } public boolean onTouchEvent(MotionEvent event) { // Log.d("付勇焜----->","TouchEvent"); // Log.d("付勇焜----->",super.onTouchEvent(event)+""); //获取到手指处的横坐标和纵坐标 int x = (int) event.getX(); int y = (int) event.getY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = x; lastY = y; break; case MotionEvent.ACTION_MOVE: //计算移动的距离 int offX = x - lastX; int offY = y - lastY; //调用layout方法来重新放置它的位置 layout(getLeft()+offX, getTop()+offY, getRight()+offX , getBottom()+offY); break; } return true; } } 核心代码就是onTouchEvent方法了。代码很简单,无非就是记录手指的上次坐标与下次坐标,然后将前后移动的增量传递给layout方法而已。 值得注意的是,onTouchEvent的返回值为true,表示我们要成功消化掉这个触摸事件。 然后再修改activity_main.xml的代码,将这个view装到布局里,如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.testdragview.DragView android:layout_width="100dp" android:layout_height="100dp" android:background="#FF0000" /> </LinearLayout> 现在来运行程序。效果如下: 效果还可以吧。可以自由的滑动了。 其实上面我们用getX()和getY()获得的是在视图坐标系中的值。其实我们也可以使用绝对坐标,即使用getRawX()和getRawY()获得的值 来实现这个滑动效果。修改DragView中的onTouchEvent中的代码,如下所示: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 > 6 7 <com.example.testdragview.DragView 8 android:layout_width="100dp" 9 android:layout_height="100dp" 10 android:background="#FF0000" /> 11 12 </LinearLayout> 一定注意,此时不同的是,在move过程中,我们要及时改变lastX,与lastY的值来获取正确的之前坐标(因为是在Android坐标系嘛,用的是绝对距离)。 此时再次运行程序,效果跟上图一样。 ![]() (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |