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; }}
- 11.View的基础知识
- View的基础知识
- View的基础知识
- View的基础知识
- 自定义View的基础知识
- View的基础知识
- view的基础知识
- View的基础知识
- View的深入浅出(一)View的基础知识
- View的事件体系---View 基础知识
- View的事件体系(1)-View基础知识
- View的事件体系基础知识
- View的事件体系-基础知识
- View基础知识
- View基础知识
- View基础知识
- View基础知识
- View的基础知识和Scroller的使用
- 机器学习笔记十:各种熵总结
- Android自定义控件
- Android沉浸式以及虚拟键冲突的解决方法
- 反射(二)之虚拟机中泛型类型信息
- 用C标准库中的vsprintf函数自制打印输出函数
- View的基础知识
- 医学图像数据格式和格式转换
- [乐意黎转载]JavaScript原型彻底理解2---继承中的原型链
- Android Studio gradle 文件中 ${supportLibVersion} 用法
- 返回到上一页的html代码的几种写法
- linux_命令_备忘
- 防止 XSS 攻击 解决方案
- PowerDesigner设计表时显示注释列Comment
- React 之 react-router