Android自定义控件

Android自定义控件

  1. 自定义XML文件所需要的布局文件,在构造器中加载

  2. 在values目录下新建attrs,添加所需要的名字

    
    
    
      
    
  3. 写个class文件继承ViewGroup(可以直接继承RelativeLayout),如果要自定义属性的话必须重写两个方法的构造器

    TypedArray taArray = context.obtainStyledAttributes(attrs,
            R.styleable.Myview_attrs);
    String textString = taArray.getString(R.styleable.Myview_attrs_text);
    Drawable drawable = taArray.getDrawable(R.styleable.Myview_attrs_src);
    tv_iconTextView.setText(textString);
    iv_icon.setImageDrawable(drawable);  
    
  4. 在所需要的布局文件中加载自定义的组合控件,必须带包名,命名空间必须也写上,自定义的属性必须用自己的命名空间不能用android:

仿优酷菜单

  • 写布局通过RelativeLayout比较合适,
  • 实现里面的逻辑关系
  • 用补间动画去实现效果
  • 用int类型去判断解决bug,setAnimationListener实现监听

属性动画

反射只能找到有一个参数的构造方法

XML文件实现

  1. 新建folder命名为:animator。里面必须定义一个关键属性
    android:propertyName="scalex"表示要改变的东西,相当于view.setScalex()方法
  2. 然后获取ObjectAnimator对象,AnimatorInflater.loadAnimator();
  3. 调用setTarget(View)方法;
  4. 最后调用start()方法

定义属性组动画

  1. 同上。(XML文件里需要设多个动画,)
  2. 获取AnimatorSet对象。(后面同上)

java代码实现属性组动画

animatorSet = new AnimatorSet();
animatorSet.playTogether(ObjectAnimator.ofFloat(btn3,  "translationX",
            0, 500, 200), ObjectAnimator.ofFloat(btn3, "translationY    ", 0,
            500, 200), ObjectAnimator.ofFloat(btn3, "rotationX", 0, 360,
            180, 360, 360), ObjectAnimator.ofFloat(btn3, "alpha", 1, 0, 1));
animatorSet.setDuration(6000)
animatorSet.start();

案例实现不停切换颜色效果

    v = (View) findViewById(R.id.v);
    final ObjectAnimator color = ObjectAnimator.ofInt(v, "backgroundColor",
            Color.RED, Color.BLUE, Color.GREEN);

    color.setDuration(1000);
    color.setRepeatCount(ObjectAnimator.INFINITE);
    color.setRepeatMode(ObjectAnimator.REVERSE);
    color.start();

你可能感兴趣的:(Android自定义控件)