由于项目需要,我需要做一个带动画的按钮,因为这种带动画的按钮需要重复使用,所以我想将按钮封装成自带动画的类——即:
1.自动响应点击事件,播放动画
2.给用户提供自定义按键事件的接口
而问题来了,在实际中我们不可能给同一个按钮类设置两个onclicklistener,一个响应动画,一个给用户自定义事件,因为下一个onclicklistener会覆盖上一个onclicklistener。
那么要如何解决呢?
很简单,继承Button类,再声明两个成员变量,这两个变量都是Onclicklistener类的变量,一个的onclick函数播放动画,一个留给类外部(给用户自定义事件),然后在OnClick(view v)函数中同时调用这两个listener的onclick()函数就可以了。
代码如下:
public class Animated_Button extends Button{
final public OnClickListener listener1;
final private OnClickListener listener2;
public Animated_Button(Context context, AttributeSet attributeSet)
{
super(context,attributeSet);
listener1=new OnClickListener(){
@Override
public void onClick(View v)
{
//执行播放动画的操作
}
};
//listener2声明为public的,为的就是让外部自定义事件
this.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
listener1.onClick(v);
listener2.onClick(v);
});
}
}
接下来只要在类外部初始化listener2就可以了。