实现滑动的七种方法
2015-11-17 18:08
477 查看
周末,android群英传与Android开发艺术探索两本书到了,确实是适合android进阶的好书, 以后书中学到的觉得不错的内容会写在这个模块。
今天介绍滑动的七种方式
基本思想:
当手指按下时,记下当前坐标 lastX, lastY
当手指移动时,记下 当前坐标 currentX, currentY
计算差值 offsetX = currentX - lastX, offsetY = currentY - lastY
android群英传中介绍了七种方式,看下面的例子。
1.定义出自己的控件,在MainActivity中直接引用
下面是我们在onTouchEvent事件中计算偏移量并处理滑动
在MotionEvent.ACTION_MOVE case块中处理滑动
1.使用layout方法
layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY);
offsetLeftAndRight与offsetTopAndBottom
LayoutParams
/[b]**[/b] 前三种方式实际都是改变子控件的布局参数, 最始调用父控件的onLayout方法重新为子控件布局[b]*******[/b]/
4.scrollTo 与scrollBy
这里要注意,
1.scrollTo与scrollBy移动的控制的子元素,我们要移动当前view,就要调用父控件的方法。
2. 实际上是移动父控件,所以 要让偏移量取反才能看到移动 子控件的效果
使用Scroller
Scroller类是sdk为我们提供 的模拟滑动的工具类,我们可以利用他实现平滑移动的效果
1. 在构造方法中实例化一个Scroller
mScroller = new Scroller(context);
2. 重写computeScroll方法,实现模拟滑动
6.使用动画
使用动画可以更新轻松的实现让控件回到原位置的平移效果
使用ViewDragHelper,
support-v4库中提供专门处理滑动的工具类,后边会专门介绍。
今天介绍滑动的七种方式
基本思想:
当手指按下时,记下当前坐标 lastX, lastY
当手指移动时,记下 当前坐标 currentX, currentY
计算差值 offsetX = currentX - lastX, offsetY = currentY - lastY
android群英传中介绍了七种方式,看下面的例子。
1.定义出自己的控件,在MainActivity中直接引用
<RelativeLayout 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" android:background="@drawable/image1" tools:context=".MainActivity"> <mytest.jiang.wei.myapplication.DragView android:background="@android:color/holo_red_dark" android:layout_width="100dp" android:layout_height="100dp" /> </RelativeLayout>
下面是我们在onTouchEvent事件中计算偏移量并处理滑动
@Override public boolean onTouchEvent(MotionEvent 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 offsetX = x - lastX; int offsetY = y - lastY; break; } return true; }
在MotionEvent.ACTION_MOVE case块中处理滑动
1.使用layout方法
layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY);
offsetLeftAndRight与offsetTopAndBottom
offsetLeftAndRight(offsetX); offsetTopAndBottom(offsetY);
LayoutParams
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams(); layoutParams.leftMargin = getLeft() + offsetX; layoutParams.topMargin = getTop() + offsetY; setLayoutParams(layoutParams);
/[b]**[/b] 前三种方式实际都是改变子控件的布局参数, 最始调用父控件的onLayout方法重新为子控件布局[b]*******[/b]/
4.scrollTo 与scrollBy
这里要注意,
1.scrollTo与scrollBy移动的控制的子元素,我们要移动当前view,就要调用父控件的方法。
2. 实际上是移动父控件,所以 要让偏移量取反才能看到移动 子控件的效果
((View)getParent()).scrollBy(-offsetX, -offsetY);
使用Scroller
Scroller类是sdk为我们提供 的模拟滑动的工具类,我们可以利用他实现平滑移动的效果
1. 在构造方法中实例化一个Scroller
mScroller = new Scroller(context);
2. 重写computeScroll方法,实现模拟滑动
@Override public void computeScroll() { // 判断是否完成滑动, 已完成则会返回false if (mScroller.computeScrollOffset()) { ((View)getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); invalidate(); } }
3.在MotionEvent.ACTION_UP case块中开启模拟滑动
case MotionEvent.ACTION_UP: //这里因为每次滑动的都是父控件, 开始滑动位置为0, 所开始 位置 是 0+parent.getScrollX() , 0+parent.getScrollY(), 偏移量为负 滑动的值 回到原点 mScroller.startScroll(parent.getScrollX(), parent.getScrollY(), -parent.getScrollX(), -parent.getScrollY()); invalidate(); break;
6.使用动画
使用动画可以更新轻松的实现让控件回到原位置的平移效果
/** * 6.使用动画 */ ObjectAnimator animX = ObjectAnimator// .ofFloat(this, "translationX", parent.getScrollX()); ObjectAnimator animY = ObjectAnimator// .ofFloat(this, "translationY", parent.getScrollY()); AnimatorSet animSet = new AnimatorSet(); animSet.playTogether(animX, animY); animSet.start();
使用ViewDragHelper,
support-v4库中提供专门处理滑动的工具类,后边会专门介绍。
相关文章推荐
- CSS中的滑动门技术
- js实现的简洁网页滑动tab菜单效果代码
- javascript制作的滑动图片菜单
- JavaScript实现图片DIV竖向滑动的方法
- JS+CSS实现滑动切换tab菜单效果
- jquery实现相册一下滑动两次的方法
- jquery实现标题字体变换的滑动门菜单效果
- jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
- 基于jQuery滑动杆实现购买日期选择效果
- jQuery实现图片与文字描述左右滑动自动切换的方法
- jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
- 基于jQuery实现的向下滑动二级菜单效果代码
- jquery实现左右滑动菜单效果代码
- jQuery层动画定位滑动效果的方法
- jQuery实现MSN中文网滑动Tab菜单效果代码
- Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
- jQuery控制的不同方向的滑动(向左、向右滑动等)
- jquery实现最简单的滑动菜单效果代码
- JS+CSS实现简易实用的滑动门菜单效果
- Android中实现可滑动的Tab的3种方式