EIT框架_接口

情况一:

① IDraw Interface

public interface IDraw {
	void doDraw(Canvas canvas);
}
② GraphView extends View

public class GraphView extends View{
    private IDraw fgDrawer;
	public GraphView(Context context) {
		super(context);
        fgDrawer=(IDraw)context;//(interface)context什么来的?
	}
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		this.drawBackground(canvas);
		fgDrawer.doDraw(canvas);//##关键语句##
	}
	protected void drawBackground(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
	}
}

③ myView extends GraphView

public class myView extends GraphView {
    private Bitmap bmp;
    private Paint paint=new Paint();
	public myView(Context context,Bitmap bitmap) {
		super(context);
		bmp=bitmap;
	}
	//覆写父类GraphView的drawBackground方法而已
	//父类在onDraw中调用了,所以在mainActivity中不见mv.drawBackground这样调用
	@Override
	protected void drawBackground(Canvas canvas) {
		super.drawBackground(canvas);
		canvas.drawBitmap(bmp, 0,0, paint);
	}
}


④ mainActivity.class

public class MainActivity extends Activity implements IDraw {
    private GraphView mv;
    private Paint paint=new Paint();
    private Bitmap bmp;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		bmp=BitmapFactory.decodeResource(getResources(), R.drawable.purple);
		mv=new myView(this,bmp);
		LinearLayout layout=new LinearLayout(this);
		LayoutParams lp=new LayoutParams(250,250);
		lp.topMargin=10;
		lp.leftMargin=10;
		layout.addView(mv,lp);
		setContentView(layout);
	}

	@Override
	public void doDraw(Canvas canvas) {
		//画机器人
		paint.setAntiAlias(true);
		RectF rectF=new RectF(80,110,180,180);
		paint.setColor(Color.GREEN);
		canvas.drawArc(rectF, 220, 180, true, paint);
		paint.setStrokeWidth(3);
		canvas.drawLine(135, 120, 140, 75, paint);
		canvas.drawLine(160, 140, 210, 130, paint);
		paint.setColor(Color.WHITE);
		canvas.drawCircle(128, 125, 6, paint);
		canvas.drawCircle(162, 145, 6, paint);
	}
}


⑤截图:



     
总结:这里所谓的框架就是GraphView这个类。 View->GraphView->myView,中间的GraphView就是我们的框架。

              关键点一:GraphView中有句(IDraw)fgDrawer.doDraw(),然后在mainActivity中implements IDraw去实现具体内容,这块类似回调函数。

              关键点二:myView覆写了GraphView中的drawBackground(),具体见注释。

-----------------------------------------

情况二:

① IDraw 接口

public interface IDraw {
    void doDraw(Canvas canvas);
}
② GraphView

public class GraphView extends View {
    private IDraw fgDrawer;//##关键语句##
	public GraphView(Context context) {
		super(context);
	}
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		this.drawBackground(canvas);
		fgDrawer.doDraw(canvas);
	}
    protected void drawBackground(Canvas canvas){
    	canvas.drawColor(Color.GRAY);
    }
    public void setForegroundDrawer(IDraw fgd){
    	fgDrawer=fgd;//##关键语句##
    }
}

③ mainActivity.class

public class MainActivity extends Activity {
    private GraphView mv=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		LinearLayout layout=new LinearLayout(this);
		LayoutParams lp=new LayoutParams(250,280);
		lp.topMargin=10;
		lp.leftMargin=10;
		mv=new GraphView(this);
		layout.addView(mv,lp);
		mv.setForegroundDrawer(new myDrawing_IDraw());//##关键语句##
		setContentView(layout);
	}
	public class myDrawing_IDraw implements IDraw{
	    private Paint paint;
		public myDrawing_IDraw(){
			paint=new Paint();
		}
		@Override
		public void doDraw(Canvas canvas) {
			    //画机器人
	       		paint.setAntiAlias(true);
	       		RectF rectF=new RectF(80,110,180,180);
	    		paint.setColor(Color.GREEN);
	    		canvas.drawArc(rectF, 220, 180, true, paint);
	    		paint.setStrokeWidth(3);
	    		canvas.drawLine(135, 120, 140, 75, paint);
	    		canvas.drawLine(160, 140, 210, 130, paint);
	    		paint.setColor(Color.WHITE);
	    		canvas.drawCircle(128, 125, 6, paint);
	    		canvas.drawCircle(162, 145, 6, paint);
		}
	}
}

④截图:



     总结: 标准的Button--onClickListener类型,回调函数形式。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值