EIT框架_接口

来源:互联网 发布:海康sadp软件下载 编辑:程序博客网 时间:2024/04/26 01:37

情况一:

① 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什么来的?}@Overrideprotected 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这样调用@Overrideprotected 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;@Overrideprotected 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);}@Overridepublic 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);}@Overrideprotected 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;@Overrideprotected 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();}@Overridepublic 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
原创粉丝点击