首页 > 代码库 > 自定义界面之圆-自定义属性回调接口

自定义界面之圆-自定义属性回调接口

 * 做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中都是使用的这种方式,就是牛逼的观察者模式。



自定义界面之圆-自定义属性回调接口