1. 程式人生 > >安卓開發之自定義View通過Drawable繪製圖標

安卓開發之自定義View通過Drawable繪製圖標

//主要通過Drawable物件來繪製圖標

public class MyView extends View{


    private float mCircleRadius;
    private int defaultHeight;
    private Drawable mIcon;
    private Rect rect;


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

    }

    private void init() {
        defaultStepIndicatorNum = (int
) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()); mCircleRadius = 0.5f * defaultHeight; mIcon = ContextCompat.getDrawable(getContext(), R.drawable.m); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); init(); } @Override
protected void onDraw(Canvas canvas) { super.onDraw(canvas); setBackgroundColor(Color.TRANSPARENT); //繪製圖標 mIcon.setBounds(rect); mIcon.draw(canvas); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int
width = MeasureSpec.getSize(widthMeasureSpec); int height = (int) (defaultHeight*1.5); if(MeasureSpec.UNSPECIFIED != MeasureSpec.getMode(heightMeasureSpec)) { height = Math.min(height, MeasureSpec.getSize(heightMeasureSpec)); } setMeasuredDimension(width,height); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); rect = new Rect((int) (getWidth()/2 - mCircleRadius), (int)(getHeight()/2-mCircleRadius) , (int) (getWidth()/2+ mCircleRadius), (int)(getHeight()/2+mCircleRadius)); } }