View基础
来源:互联网 发布:轩辕剑坐骑进阶数据 编辑:程序博客网 时间:2024/06/06 03:47
1.View坐标系
我随便设置了一个View,打印如下两句日志,可验证出结果:
(1)Bottom确实比Top的值大,即Y坐标轴的正方向是向下的
(2)height = bottom - top; width = right - left
Log.d("thmtest","top = "+view.getTop()+" & left = "+view.getLeft() +" &bottom = "+view.getBottom()+ "& right = "+view.getRight());Log.d("thmtest", "width = "+view.getWidth() +" &height = "+view.getHeight());
08-09 13:58:55.125 18893-18893/com.thm.testview D/thmtest: top = 250 & left = 0 &bottom = 467& right = 87308-09 13:58:55.125 18893-18893/com.thm.testview D/thmtest: width = 873 &height = 217
2、MotionEvent、TouchSlop
MotionEvent
getX()/getY()和getRawX()/getRawY()的区别
前者是相对于控件的原点,即左上角,(left, top)
后者是相对于坐标系的原点,即屏幕的左上角,(0,0)
TouchSlop
最小滑动距离,手指滑动低于这个值,认为不是滑动操作
获取方式:
int touchSlop = ViewConfiguration.get(getContext()) .getScaledTouchSlop();
3、VelocityTracker
可用于获取滑动速度,用于做一些手势速度的相关逻辑处理
使用方法:
VelocityTracker mVelocityTracker = VelocityTracker.obtain();
public boolean onTouchEvent(MotionEvent event) { mVelocityTracker.addMovement(event); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: { mVelocityTracker.computeCurrentVelocity(1000); float xVelocity = mVelocityTracker.getXVelocity(); if (Math.abs(xVelocity) > targetValue) { //do something } break; } default: break; } return true; }
4、GestureDetector
手势动作处理基本上都在onTouchEvent中,
但是GestureDetector也可用于监听用户的手势动作,做出处理
使用方法:
private GestureDetector mGestureDetector = new GestureDetector(getContext(),new GestureListener()); @Override public boolean onTouchEvent(MotionEvent event) { return mGestureDetector.onTouchEvent(event); } class GestureListener extends GestureDetector.SimpleOnGestureListener{ public boolean onSingleTapUp(MotionEvent e) { return false; } public void onLongPress(MotionEvent e) { } public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false; } public void onShowPress(MotionEvent e) { } public boolean onDown(MotionEvent e) { return false; } public boolean onDoubleTap(MotionEvent e) { return false; } public boolean onDoubleTapEvent(MotionEvent e) { return false; } public boolean onSingleTapConfirmed(MotionEvent e) { return false; } }
阅读全文
0 0
- View 基础
- View基础
- Android自定义View基础
- Android 基础 View
- 【Android基础】-View.MeasureSpec
- View层基础动画
- Django View基础
- android基础之view
- 自定义View基础
- android--View自定义基础
- android自定义View基础
- android -view基础
- Android中的View基础
- 自定义 View 基础篇
- Android View基础
- 自定义View-基础
- 自定义View基础-坐标系
- 自定义View基础
- 什么才是真正的双线机房?如何辨别真假双线机房?
- Q
- POST获取数据和json解析
- sscanf与sprintf
- POJ
- View基础
- BZOJ 1854: [Scoi2010]游戏 贪心+并查集
- 关于Integer.parseInt(str)报NumberFormatException异常问题
- linux 清理无效ppa源
- 30对象1---data
- Xamarin.Forms 用户界面——控件——Style——介绍
- 自我介绍
- 数据库初始学习
- 2017/8/9训练日记