标签:
* 做Android应用开发想深入的话 就是要会使用一些高级控件,以及自定义View了,好吧,开始自定义view走向大神之路,这一节从最简单的* 圆形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