* 圆形view开始,如何定义属性,以及回调使用。
下面是实现代码
/**
* 一个圆形的进度条控件
* @author fengy
*
*/
public class CustomProgressView extends View {
Paint paint ;
int mColor;//圆的颜色
private OnClickProgressViewListener mclickProgressView;
public CustomProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
paint = new Paint();
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.customprogress);
mColor = typedArray.getColor(R.styleable.customprogress_color, Color.RED);
typedArray.recycle();
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//画最外层的圆
paint.setColor(mColor);
paint.setStyle(Style.STROKE);
canvas.drawCircle(getWidth()/2, getHeight()/2, getWidth()/2, paint);
}
public void setLisner(OnClickProgressViewListener pOnClickProgressView) {
mclickProgressView = pOnClickProgressView;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction()==MotionEvent.ACTION_UP) {
mclickProgressView.onClick(CustomProgressView.this);
}
return super.onTouchEvent(event);
}
/*
* 暴露接口 作为回调使用
*
*/
public interface OnClickProgressViewListener {
public void onClick(CustomProgressView v);
}
}为什么使用回调呢,目的是为了view 的通用性,业务逻辑让使用者去实现。
有两种方法使用回调第一种
CustomProgressView cView = (CustomProgressView) rootView.findViewById(R.id.cv);
cView.setLisner(new OnClickProgressViewListener() {
@Override
public void onClick(CustomProgressView v) {
// TODO Auto-generated method stub
//dosomething
}
});
第二种让你的类实现 点击接口implements OnClickProgressViewListener 然后实现他的onclick方法,
谁用谁实现是不是非常简单呢,Android的view中都是使用的这种方式,就是牛逼的观察者模式。
原文:http://blog.csdn.net/xxmbaobao1/article/details/42741285