View的基础知识

来源:互联网 发布:淘宝放心淘怎么设置 编辑:程序博客网 时间:2024/06/07 14:03

1.什么是View?
View是Android中所有控件的基类
ViewGroup包含了多个View,ViewGruop也继承View
即View本身可以是单个控件也可以是由多个控件组成的一组控件

2.View的位置参数

//这些坐标都是相对于view父容器的//view 左上角的坐标(mTop,mLeft)//view 右上角坐标(mBottom,mRight)mTop = mBtView.getTop();mLeft = mBtView.getLeft();mBottom = mBtView.getBottom();mRight = mBtView.getRight();//得出当前view的宽和高  单位是像素  pxint width = mRight-mLeft;int height = mBottom-mTop;

3.MotionEvent和TouchSlop

MotionEvent分为:

MotionEvent.ACTION_DOWN:手指按下

MotionEvent.ACTION_MOVE:手指滑动

MotionEvent.ACTION_UP:手指抬起

通过MotionEvent对象可以获取点击事件发生的x和y坐标

getX和getY :相对于View左上角的坐标

getRawX和getRawY:返回的是相对于手机屏幕的左上角的坐标

TouchSlop:是系统所能识别出的被认为是滑动的最小距离
和设备相关,不同设备上的值不同
可以通过下面方式获取:
ViewConfiguration.get(MainActivity.this).getScaledTouchSlop();

4.VelocityTracker、Scroller和GestureDetector

(1)VelocityTracker:用于追踪手指在滑动过程中的速度,包含水平速度和竖直速度

在View的onTouchEvent中

VelocityTracker mVelocityTracker = VelocityTracker.obtain();
mVelocityTracker.addMovement(event);

//1秒内手指滑动过得像素数,注意可以为负数

mVelocityTracker.computeCurrentVelocity(1000);

//x方向的速度
int xVelocity =(int) mVelocityTracker.getXVelocity();
//y方向的速度
int yVelocity = (int) mVelocityTracker.getYVelocity();

//重置并且回收
mVelocityTracker.clear();
mVelocityTracker.recycle();

(2)GestureDetector:手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为

(3)Scroller:实现View的弹性滑动(scrollTo 和scrollBy的滑动是瞬间完成的)

5.View的滑动

三种方式实现view的滑动:
View本身提供的scrollTo和scrollBy方法实现滑动
通过动画给View添加平移效果来实现滑动
通过改变View的LayoutParams,使得View重新布局从而实现滑动

package com.zhoujian.viewevent.activity;import android.app.Activity;import android.os.Bundle;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.VelocityTracker;import android.view.View;import android.view.ViewConfiguration;import android.widget.Button;import android.widget.Scroller;import com.zhoujian.viewevent.R;import butterknife.ButterKnife;import butterknife.InjectView;/** * 第三章   View的事件体系 3.1 View的基础知识 3.1.1 什么是View View是Android中所有控件的基类 ViewGroup包含了多个View,ViewGruop也继承View 即View本身可以是单个控件也可以是由多个控件组成的一组控件 3.1.2 View的位置参数(见代码) 3.1.3 MotionEvent和TouchSlop MotionEvent分为: MotionEvent.ACTION_DOWN:手指按下 MotionEvent.ACTION_MOVE:手指滑动 MotionEvent.ACTION_UP:手指抬起 通过MotionEvent对象可以获取点击事件发生的x和y坐标 getX和getY :相对于View左上角的坐标 getRawX和getRawY:返回的是相对于手机屏幕的左上角的坐标 TouchSlop:是系统所能识别出的被认为是滑动的最小距离 和设备相关,不同设备上的值不同 可以通过下面方式获取: ViewConfiguration.get(MainActivity.this).getScaledTouchSlop(); 3.1.4 VelocityTracker、Scroller和GestureDetector 1.VelocityTracker:用于追踪手指在滑动过程中的速度,包含水平速度和竖直速度 在View的onTouchEvent中 VelocityTracker mVelocityTracker = VelocityTracker.obtain(); mVelocityTracker.addMovement(event); //1秒内手指滑动过得像素数,注意可以为负数 mVelocityTracker.computeCurrentVelocity(1000); //x方向的速度 int xVelocity =(int) mVelocityTracker.getXVelocity(); //y方向的速度 int yVelocity = (int) mVelocityTracker.getYVelocity(); //重置并且回收 mVelocityTracker.clear(); mVelocityTracker.recycle(); 2.GestureDetector:手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为 3.Scroller:实现View的弹性滑动(scrollTo 和scrollBy的滑动是瞬间完成的) 3.2 Viewd的滑动 三种方式实现view的滑动 (1)View本身提供的scrollTo和scrollBy方法实现滑动 (2)通过动画给View添加平移效果来实现滑动 (3)通过改变View的LayoutParams,使得View重新布局从而实现滑动 */public class MainActivity extends Activity implements GestureDetector.OnGestureListener{    @InjectView(R.id.bt_get)    Button mBtGet;    private int mLeft;    private int mRight;    private int mTop;    private int mBottom;    @InjectView(R.id.bt_view)    Button mBtView;    private int mSlop;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.inject(this);        //View的位置参数        clickEvent();        mSlop = ViewConfiguration.get(MainActivity.this).getScaledTouchSlop();        VelocityTracker mVelocityTracker = VelocityTracker.obtain();        //mVelocityTracker.addMovement(event);        //1秒内手指滑动过得像素数,注意可以为负数        mVelocityTracker.computeCurrentVelocity(1000);        //x方向的速度        int xVelocity =(int) mVelocityTracker.getXVelocity();        //y方向的速度        int yVelocity = (int) mVelocityTracker.getYVelocity();        mVelocityTracker.clear();        mVelocityTracker.recycle();        GestureDetector mGestureDetector= new GestureDetector(MainActivity.this);        Scroller mScroller = new Scroller(MainActivity.this);    }    private void clickEvent()    {        mBtGet.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //这些坐标都是相对于view父容器的                //view 左上角的坐标(mTop,mLeft)                //view 右上角坐标(mBottom,mRight)                mTop = mBtView.getTop();                mLeft = mBtView.getLeft();                mBottom = mBtView.getBottom();                mRight = mBtView.getRight();                //得出当前view的宽和高  单位是像素  px                int width = mRight-mLeft;                int height = mBottom-mTop;            }        });    }    @Override    protected void onRestart() {        super.onRestart();    }    @Override    protected void onStart() {        super.onStart();    }    @Override    protected void onResume() {        super.onResume();    }    @Override    protected void onPause() {        super.onPause();    }    @Override    protected void onStop() {        super.onStop();    }    @Override    protected void onDestroy() {        super.onDestroy();    }    /**     * 手指轻轻触摸屏幕的一瞬间     * @param event     * @return     */    @Override    public boolean onDown(MotionEvent event) {        return false;    }    /**     * 手指轻轻触摸屏幕,尚未松开或拖动     * @param event     */    @Override    public void onShowPress(MotionEvent event) {    }    /**     * 用户单击     * @param event     * @return     */    @Override    public boolean onSingleTapUp(MotionEvent event) {        return false;    }    /**     * 手指滑动     * @param event     * @param event1     * @param v     * @param v1     * @return     */    @Override    public boolean onScroll(MotionEvent event, MotionEvent event1, float v, float v1) {        return false;    }    /**     * 长按     * @param event     */    @Override    public void onLongPress(MotionEvent event) {    }    /**     * 快速滑动     * @param event     * @param event1     * @param v     * @param v1     * @return     */    @Override    public boolean onFling(MotionEvent event, MotionEvent event1, float v, float v1) {        return false;    }}
0 0