Android开发艺术探索 第3章 View基础知识(一)

1.View的位置参数: left,right,top,bottom

width = right - left;

height = bottom - top;

从Android3.0开始,新增x, y, translationX, translationY. x和y是view左上角的坐标,translationX和translationY是View左上角相对于父容器的偏移量。

详解http://blog.csdn.net/chdjj/article/details/42293753

getX() = getLeft() + getTranslationX();

getY() = getTop() + getTranslationY();

2.MotionEvent

ACTION_DOWN  接触屏幕 ACTION_MOVE 移动 ACTION_UP 手指从屏幕上松开的一瞬间

点击屏幕,手松开:  DOWN -> UP

点击屏幕滑动一会再松开: DOWN -> MOVE ->....-> MOVE -> UP

getX() getY() 相对于当前View的左上角的坐标。  

getRawX() getRawY() 相对于屏幕左上角的坐标

3.TouchSlop

TouchSlop系统所能识别的被认为是滑动的最小距离的常量,如果两次滑动之间的距离小于这个常量,就不认为在进行滑动操作。

通过ViewConfiguration.get(getContext()).getScaledTouchSlop()获得

4.VelocityTracker 速度追踪

onTouch和onTouchEvent的区别 http://blog.csdn.net/huiguixian/article/details/22193977 

        Button button = (Button) findViewById(R.id.btn_main);
        button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                VelocityTracker velocityTracker = VelocityTracker.obtain();
                //追踪当前单机事件的速度
                velocityTracker.addMovement(event);
                //要获得速度,先用computeCurrentVelocity计算速度,再获取
                //时间间隔设为1000ms,表示1秒内划过的像素数
                velocityTracker.computeCurrentVelocity(1000);
                //表示1s内水平方向/竖直方向划过的想速速
                int xVelocity = (int) velocityTracker.getXVelocity();
                int yVelocity = (int) velocityTracker.getYVelocity();
                //不使用时,关闭,回收
                velocityTracker.clear();
                velocityTracker.recycle();
                return true;
            }
        });

速度 = (终点位置 - 起点位置)/ 时间

5.View的滑动,srcollTo/scrollBy

View内部的两个属性mScrollX和mScrollY通过getScrollX和getScrollY获得。View边缘是指View的位置,View内容边缘是指View中的内容的边缘。scrollTo和scrollBy只能改变View内容的位置而不能改变View的位置。当View左边缘在View内容左边缘的右边时,mScrollX为正,反之为负(从左向右滑动,mScrollX为负),当View上边缘在View内容上边缘的下边时, mScrollY为正(从上到下滑动,mScrollY为负)

6.使用动画来移动View,主要是操作View的translationX和translationY属性。如果fillAfter为false,View动画完成以后,动画结果会消失,View会恢复到动画完成以前的状态,fillAfter设置为true才会保留动画结束后的状态,但是,View动画不能真正改变View的位置。比如,Button通过动画看起来向右移动了100px,但在系统眼里,其位置信息并不会随着动画的改变而改变,单击新位置并不会触发onClick,相反的,单击原来的位置却能触发。

7.改变布局参数来实现View滑动。改变LayoutParams

 

posted @ 2017-06-12 10:17  why_su  阅读(143)  评论(0编辑  收藏  举报