最近,在做项目的时候,经常UI给我们的效果和我们做出来 ,或者网上搜到的例子很不一样,很烦恼,于是就很想自己学习一下自定义View,虽然很难对我这么一个小菜来说,可能会想,“走都走不顺,还要跑”,哎呀,就要试试跑起来!!
看了很多个鸿洋大神的博文,也跟着写了好多个他写的demo,发现很多东西那样写着不知道为什么,然后看到有另外有一个大神通过源码分析,就跟着看,跟着学了一下,边几下点大概我能理解的东西;有兴趣可以去看看哦,感觉写的很详细 ,很容易让人理解 http://blog.csdn.net/lfdfhl/article/details/51671038.
首先是自定义view的几个工具
一,Cofiguration
用来描述设备的配置信息(输入模式,屏幕大小,屏幕方向等)
Configuration c = getResources().getConfiguration();
//获取国家码
int countryCode = c.mcc;
//获取网络码
int networkCode = c.mnc;
//判断横竖屏
if(c.orientation == Configuration.ORIENTATION_PORTRAIT){
}else{
}
2,ViewGonfiguration
提供了一些自定义控件用到的标准常量,比如:尺寸大小,滑动距离,敏感度等等。
获取实例
ViewConfiguration vc = ViewConfiguration.get(context);
它的对象方法:
//获取touchSlop。该值表示系统所能识别的被认为是滑动的最小距离
int touchSlop = vc.getScaledTouchSlop();
//获取Fling速度的最小值和最大值
int mininumVelocity = vc.getScaledMininumFlingVelocity();
int maxnumVelocity = vc.getScaledMaxnumFlingVelocity();
//判断是否有物理按键
boolean isHavePermanentMenuKey = vc.hasPermanentMenuKey();
它的静态方法:
//双击间隔时间,在改时间内是双击,否则是单击
int doubleTapTime = ViewConfiguration.getDoubleTapTimeout();
//按住状态转变为长按状态需要的时间
int longPressTimeout = ViewConfiguration.getLongPressTimeout();
//重复按键的时间
int keyRepeatTimeout = ViewConfiguration.getKeyRepeatTimeout();
3,GestureDetector
手势处理工具,手势监听类
基本使用:
1,AActivity 实现OnGestureListener
其中方法有:onDown();//触摸屏幕时调用
onFling(); //手指在屏幕上拖动时会调用
onLongPress; //手指长按时调用
onShowPress(); //手指在屏幕上按下,且未松开时调用
onSingleTapUp; //轻击屏幕时调用该方法
2,生成GestureDetector对象
GestureDetector gd = new GestureDetector(context,new AActivity());
A类为GestureListener监听的实现
3,将Touch事件交给GestureListener处理
public boolean onTouchEvent(MotionEvent ev){
reture mGestureDetor.onTouchEvent(ev);
}
4,VelocityTracker(速度追踪)
用于跟踪触摸屏事件的速率。
基本使用:
1,开始速度追踪:在这里初始化VelocityTracker并且把追踪到的ev注册到VelocityTracker的监听中。
private void startVelocityTracker(MotionEvent ev){
if(mVelocityTracker == null){
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker .addMovement(ev);
}
2,获取追踪到的速度
private int getScrollVelocity(){
//设置VelocityTracker单位,1000表示1s内运动的像素
vt.computeCurrentVelocity(1000);
//获取在1s内x方向所滑动的像素
int xv = vt.getXVelocity();(同理获取y)
returen Math.abs(xv)
}
3,接触速度追踪
private void stopVelocityTracker(){
if(vt !=null){
vt.recycle();
vt =null;
}
}
5,Scoller
6,ViewDragHelper
最后两个我还要去看呢!!不太明白
原文:http://blog.csdn.net/lfdfhl/article/details/51671038.
注:这篇只是我自己想要记下的哦,相当于我的笔记。感谢原作者