Android自定义控件
自定义XML文件所需要的布局文件,在构造器中加载
-
在values目录下新建attrs,添加所需要的名字
<declare-styleable name="Myview_attrs"> <attr name="src" format="reference"></attr> <attr name="text" format="string"></attr> </declare-styleable>
-
写个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);
在所需要的布局文件中加载自定义的组合控件,必须带包名,命名空间必须也写上,自定义的属性必须用自己的命名空间不能用android:
仿优酷菜单
- 写布局通过RelativeLayout比较合适,
- 实现里面的逻辑关系
- 用补间动画去实现效果
- 用int类型去判断解决bug,setAnimationListener实现监听
属性动画
反射只能找到有一个参数的构造方法
XML文件实现
- 新建folder命名为:animator。里面必须定义一个关键属性
android:propertyName="scalex"表示要改变的东西,相当于view.setScalex()方法 - 然后获取ObjectAnimator对象,AnimatorInflater.loadAnimator();
- 调用setTarget(View)方法;
- 最后调用start()方法
定义属性组动画
- 同上。(XML文件里需要设多个动画,)
- 获取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();