標籤:sdn java article draw res public getview tle cti
建立項目,建立DashBoardView
繼承自View
實現OnGlobalLayoutListener
介面,並重寫OnDraw
方法。
使用OnGlobalLayoutListener
介面須要重寫onGlobalLayout
方法。在這種方法中我們將擷取View的寬高。
建立例如以下變數:
private Context mContext; private Paint mCirclePaint,mDegreePaint,mHourPaint,mMinPaint; private int mViewWidth,mViewHeight;
初始化這些變數:
public void init(Context context){ mContext = context; mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mDegreePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mHourPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mMinPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mCirclePaint.setAntiAlias(true); mCirclePaint.setStrokeWidth(5); mCirclePaint.setStyle(Paint.Style.STROKE); mHourPaint.setStrokeWidth(20); mMinPaint.setStrokeWidth(10); getViewTreeObserver().addOnGlobalLayoutListener(this); }
onGlobalLayout
中初始化DashBoardView
寬高:
@Override public void onGlobalLayout() { mViewHeight = getHeight(); mViewWidth = getWidth(); }
在onDraw方法中加入例如以下繪製代碼:
/* * 畫錶盤圓形 * */ canvas.drawCircle(mViewWidth/2,mViewHeight/2,mViewWidth/2,mCirclePaint); /* * 畫刻度 * */ for (int i=0;i<24;i++){ if(i==0 || i==6 || i==12 || i==18){ /* * 畫整點刻度 * */ mDegreePaint.setStrokeWidth(5); mDegreePaint.setTextSize(30); canvas.drawLine(mViewWidth/2,mViewHeight/2-mViewWidth/2,mViewWidth/2,mViewHeight/2-mViewWidth/2+60,mDegreePaint); String degree = String.valueOf(i); canvas.drawText(degree,mViewWidth/2-mDegreePaint.measureText(degree)/2,mViewHeight/2-mViewWidth/2+90,mDegreePaint); }else{ mDegreePaint.setStrokeWidth(3); mDegreePaint.setTextSize(15); canvas.drawLine(mViewWidth/2,mViewHeight/2-mViewWidth/2,mViewWidth/2,mViewHeight/2-mViewWidth/2+30,mDegreePaint); String degree = String.valueOf(i); canvas.drawText(degree,mViewWidth/2-mDegreePaint.measureText(degree)/2,mViewHeight/2-mViewWidth/2+90,mDegreePaint); } /* * 通過旋轉畫布來畫好全部的刻度 * */ canvas.rotate(15,mViewWidth/2,mViewHeight/2); } /* * 畫指標 * */ mHourPaint.setStrokeWidth(20); mMinPaint.setStrokeWidth(10); canvas.save(); canvas.translate(mViewWidth/2,mViewHeight/2); canvas.drawLine(0,0,100,100,mHourPaint); canvas.drawLine(0,0,100,200,mMinPaint); canvas.restore();
至此我們就完畢了一個儀錶盤的繪製。例如以下:
完整代碼下載:完整項目
Android自己定義View之儀錶盤