学习自定义View—简要笔记(一)

    最近,在做项目的时候,经常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.


注:这篇只是我自己想要记下的哦,相当于我的笔记。感谢原作者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值