android 入门-android自定义控件

第一种:继承View

实现自己的属性

  <com.cc.imagewithmarkersample.MyView
        android:id="@+id/myviewid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        SrcLT="@drawable/red"
        SrcRT="@drawable/green"
        SrcRB="@drawable/green"/>
public class MyView extends View {

    //    private String mtext;
    private int msrclt, msrcrt, msrcrb;
    private static final String SrcLT = "SrcLT";
    private static final String SrcRT = "SrcRT";
    private static final String SrcRB = "SrcRB";
    private static final int Canvas_W=150,Canvas_H=150;
    private static final int Rect_W=100,Rect_H=100;
    private Bitmap bitmap;
    private int bitmap_W,bitmap_H;
    private int LT_X=0,LT_Y=0;
    private int RT_X=100,RT_Y=0;
    private int RB_X=100,RB_Y=100;
    private int Bitmap_X=25,Bitmap_Y=25;
    private Rect mRect=null;


    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
//        int textId = attrs.getAttributeResourceValue(null, "Text",0);
        int srcLeftTopId = attrs.getAttributeResourceValue(null, SrcLT, 0);
        int srcRightTopId = attrs.getAttributeResourceValue(null, SrcRT, 0);
        int srcRightBottomId = attrs.getAttributeResourceValue(null, SrcRB, 0);
//        mtext = context.getResources().getText(textId).toString();
        msrclt = srcLeftTopId;
        msrcrt = srcRightTopId;
        msrcrb = srcRightBottomId;

        mRect=new Rect(Bitmap_X,Bitmap_Y,Rect_W+Bitmap_X,Rect_H+Bitmap_Y);
    }


    public void setImageBitmap(Bitmap bm) {
        /** 获取图片宽高 **/
        bitmap_W = bm.getWidth();
        bitmap_H = bm.getHeight();

        Bitmap_X=(Canvas_W-bitmap_W)/2;
        Bitmap_Y=(Canvas_H-bitmap_H)/2;

        if (bitmap != bm) {
            bitmap=bm;
        }

    }

    @Override
    protected void onDraw(Canvas canvas) {
        Paint paint = new Paint();
        paint.setColor(Color.GRAY);

        canvas.drawBitmap(bitmap, Bitmap_X, Bitmap_Y, paint);

        paint.setAlpha(100);
        canvas.drawRect(mRect,paint);


        paint.setAlpha(255);
        onDrawLt(canvas, paint);
        onDrawRt(canvas, paint);
        onDrawRb(canvas, paint);


//        canvas.drawText(mtext, bw / 2, 30, paint);
    }

    private void onDrawLt(Canvas canvas, Paint paint) {
        InputStream is = getResources().openRawResource(msrclt);
        Bitmap mBitmap = BitmapFactory.decodeStream(is);
        int bh = mBitmap.getHeight();
        int bw = mBitmap.getWidth();
        canvas.drawBitmap(mBitmap, LT_X, LT_Y, paint);

    }

    private void onDrawRt(Canvas canvas, Paint paint) {
        InputStream is = getResources().openRawResource(msrcrt);
        Bitmap mBitmap = BitmapFactory.decodeStream(is);
        int bh = mBitmap.getHeight();
        int bw = mBitmap.getWidth();
        canvas.drawBitmap(mBitmap, RT_X, RT_Y, paint);
    }

    private void onDrawRb(Canvas canvas, Paint paint) {
        InputStream is = getResources().openRawResource(msrcrb);
        Bitmap mBitmap = BitmapFactory.decodeStream(is);
        int bh = mBitmap.getHeight();
        int bw = mBitmap.getWidth();
        canvas.drawBitmap(mBitmap, RB_X, RB_Y, paint);
    }
}
原文地址:https://www.cnblogs.com/androllen/p/4892737.html