Android自定义控件7----滑动动画scrollTo/scrollBy使用

来源:互联网 发布:canvas nest.js下载 编辑:程序博客网 时间:2024/06/07 11:10
#移动动画的三种方式:

  1使用scrollTo/scrollBy
   用于做View的滑动,它可以比较方便实现滑动的效果,并且不影响内部元素的点击事件;它只能滑动View的内容,并不能滑动View本身。

   调用View的scrollTo()和scrollBy()是用于滑动View中的内容,而不是把某个View的位置进行改变。如果想改变莫个View在屏幕中的位置,可以使用如下的方法。


  2使用动画
   View动画是对View的影像做操作,它并不能真正改变View的位置参数,包括宽和高。

   Android3.0以上使用属性动画可以解决,可以改变位置参数。


  3改变布局参数

   适用于对View有交互的View.


#以当前控件左上方原点坐标,getX()距离X轴上的距离,getY()距离Y轴上的距离

MotionEvent.getX();
MotionEvent.getY();

#getScrollX(),getScrollY()就是当前视图相对于屏幕原点在Y轴上的偏移量.
以当前视图以左上角为原点的坐标,当前控件里面的内容偏移坐标的距离或者叫偏移量;
如果是从左到右移动得到的值是负数,负数代表内容距离左边的偏移量;从右到左移动是正值

注意当前控件的getScrollX()和childView.getScrollX()是有区别的
可以分别演示
用这个打印:
Log.d("yangguangfu", "getScrollX ======================" + getScrollX());
 E/yangguangfu: getScrollX ======================0
 E/yangguangfu: getScrollX ======================0
 E/yangguangfu: getScrollX ======================0

childView.getScrollX():

#startX,startY和endX,endY和distanceX
distanceX 如果是从右往左滑动是负值,如果是从左往右滑动是正值。
distanceY 如果是从下往上滑动是负值,如果是从上往下滑动是正值。

startX = ev.getX();
startY = ev.getY();
float DX = getScrollX() - distanceX;
打日志分析
Log.d("yangguangfu", "( " + startX+",,,"+startY+")"+"--("+endX+",,,"+endY+")--("+distanceX+",,,"+distanceY+")"+",DX==="+DX);

推出结论:
float DX = getScrollX() - distanceX;
从日志看是getScrollX()的值是0,代表内容没有移动
总体就是对distanceX 值取反
距离从左到有滑动的是正值


我们知道scrollTo(dx,0)
dx>0是从右到左滑动
dx<0是从左到有滑动

例如:要从左往右滑动,dx需要的是负值。
float DX =  - distanceX;
childView.scrollTo((int) DX, (int) 0);

Scroller
#scroller.startScroll(int startX, int startY, int dx, int dy)参数说明

四个参数分别表示起点的坐标和滑动的向量,即从(startX,startY)开始滑动,横向滑动dx的距离,纵向滑动dy的距离(正值向左滑,负值向右滑),而这里的startX,startY又是参照的父视图左上角为原点坐标的坐标系,滑屏时经常使用getScrollX()和getScrollY()来代表屏幕左边缘和上边缘处于父视图坐标系的具体位置
公式:
int dx =  目标- getScrollX()

view.scrollTo(x,y)  将整个父视图的左上角定为(0,0),再移动这个屏幕的左上角到父视图的点(x,y)处,注意此处的x和y是根据父视图的坐标系来定的。

view.scrollBy(x,y)  x代表横向移动的距离,y代表纵向移动的距离
childView.scrollBy((int) DX, (int) 0);

测试demo

对应CustomView2 ---- EventTest2

参考视频:

http://www.gulixueyuan.com/course/124/learn#lesson/1927
源码下载:
http://download.csdn.net/download/zhaihaohao1/10111351



阅读全文
0 0