一直以来觉得自己只是个菜鸟,虽然公司的项目能轻易的完成,但是总感觉缺少什么。大家似乎都认为android很简单,其实我认为只是初级android简单,若想深入研究它,其实也是很有看头的。

看了任玉刚老师的博客明白了,若想进一步学习android,还是要学习自定义View的,要想做出自己想要的绚丽的View,还是要从底层做起,下一番狠功夫。

俗话说的好,“欲练神功,必先**”,其实说得很有道理。其实自己一直都对View这个重要的知识点还是很模糊的,貌似也是android的难点,为了能练得此神功,花了70块大洋买了任玉刚老师编写的书籍《Android开发艺术探索》,听说这本书的口碑很好,买来后感觉确实非常棒。

今天学习了最简单的一个demo,自定义View实现随手势滑动的小圆球,开始自己的自定义View学习之旅。

效果图:


一.新建一个CustomView,继承自ImageView:

public class CustomView extends ImageView {    private int lastX;    private int lastY;    public CustomView(Context context) {        this(context, null);    }    public CustomView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        //获取屏幕的位置 xy值        int tempX = (int) event.getRawX();        int tempY = (int) event.getRawY();        switch (event.getAction()){            case MotionEvent.ACTION_DOWN:                break;            case MotionEvent.ACTION_MOVE:                int deltaX = tempX - lastX;                int deltaY = tempY - lastY;                Log.i("dali", "move:deltaX:" + deltaX + ",deltaY:" + deltaY);                int translationX = (int) (ViewHelper.getTranslationX(this) + deltaX);                int translationY = (int) (ViewHelper.getTranslationY(this) + deltaY);                ViewHelper.setTranslationX(this,translationX);                ViewHelper.setTranslationY(this,translationY);                break;            case MotionEvent.ACTION_UP:                break;            default:                break;        }        lastX = tempX;        lastY = tempY;        return true;    }}
可以看到,重写了onTouchEvent方法,通过event.getRawX和event.getRawY获取了相对于屏幕的坐标,因为这是要全屏滑动的,所以需要获取当前点击事件在屏幕中的坐标而不是相对于View自身的坐标。并且声明两个变量lastX和lastY,来记录View移动的初始值,通过两点的坐标,那么便能计算出位移,然后通过第三方库nineoldandroids来实现View的动画移动,最后再次记录lastX和lastY的值。

二.调用这个自定义View:

    
三.画一个背景为红色的圆:

<?xml version="1.0" encoding="utf-8"?>        










更多相关文章

  1. (1)集成
  2. 「Android」将网页转换为PDF的初步实现
  3. Android屏幕锁定实例源码详解教程一
  4. Android程序版本控制工具类
  5. Android(安卓)自带日期(DatePicker)和时间(TimePicker)选择器使
  6. android调节屏幕亮度
  7. Android之权限管理
  8. android 固定横屏幕竖屏
  9. Android(安卓)定位不依赖三方sdk

随机推荐

  1. Android消息机制Message消息池
  2. Android Design Support Library——Goog
  3. Android自动打包、签名、优化、上传ANT脚
  4. Android番外03_Umeng友盟统计集成
  5. Android Animaition
  6. 自定义控件其实很简单2/3
  7. [转]Eclipse 查看Android SDK源码
  8. Android启动Service的两种方式之startSer
  9. Android之使用HttpPost提交数据到服务器(A
  10. android studio 1.0安装及遇到的问题