Android之自定义View学习(一)
Android之自定义View学习(一)
Canvas常用方法:
/** * Created by SiberiaDante on 2017/6/3. */ public class BaseViewDraw extends View { private Paint mPaint1; private Paint mPaint2; private Paint mPaint3; private Paint mPaint4; public BaseViewDraw(Context context) { super(context); } public BaseViewDraw(Context context, AttributeSet attrs) { super(context, attrs); initPaint();//初始化画笔 } public BaseViewDraw(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } private void initPaint() { mPaint1 = new Paint(); mPaint1.setColor(Color.BLUE);//设置画笔颜色 mPaint1.setStrokeWidth(10f);//设置画笔宽度 mPaint1.setStyle(Paint.Style.FILL);//设置画笔填充模式 mPaint2 = new Paint(); mPaint2.setColor(Color.RED); mPaint2.setStrokeWidth(20f); mPaint2.setStyle(Paint.Style.FILL_AND_STROKE); mPaint3 = new Paint(); mPaint3.setColor(Color.BLACK); mPaint3.setStrokeWidth(15f); mPaint3.setStyle(Paint.Style.STROKE); mPaint4 = new Paint(); mPaint4.setColor(Color.GREEN); mPaint4.setStrokeWidth(5f); mPaint4.setStyle(Paint.Style.STROKE); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); /** * 画颜色 * 了解更多canvas前往官方文档:https://developer.android.com/reference/android/graphics/Canvas.html */ canvas.drawColor(Color.GRAY); /** * 画点 */ canvas.drawPoint(200, 200, mPaint1);//画一个点----200,200分别代表在想,x,y轴上的坐标 canvas.drawPoints( new float[]{//画多个点 300, 300, 300, 400, 300, 500 }, mPaint1); /** * 画线条 */ canvas.drawLine(10, 10, 200, 500, mPaint1);//10,10代表起点,200,500代表终点 canvas.drawLines(new float[]{//画多条线段 20, 20, 600, 20, 50, 200, 50, 600}, mPaint1); /** * 画矩形,三种写法 * 了解更多 Rect前往官方文档:https://developer.android.com/reference/android/graphics/Rect.html * 了解更多 RectF前往官方文档:http://developer.android.com/reference/android/graphics/RectF.html */ //第一种 canvas.drawRect(500, 100, 800, 400, mPaint1); //第二种 final Rect rect = new Rect(500, 500, 800, 800); canvas.drawRect(rect, mPaint1); //第三种 final RectF rectF = new RectF(500, 900, 800, 1200); canvas.drawRect(rectF, mPaint1); /** * 绘制圆角矩形 */ //方法一 final RectF rectF1 = new RectF(100, 900, 400, 1200); //10,30分别代表圆弧的半径 canvas.drawRoundRect(rectF1, 10, 30, mPaint2); //方法二 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //这种写法仅支持API21+ canvas.drawRoundRect(100, 900, 400, 1200, 10, 30, mPaint2); } /** * 画椭圆 * 350为矩形x轴长度的一半 * 150为矩形y轴长度的一半 */ final RectF rectF2 = new RectF(100, 500, 800, 800); canvas.drawRoundRect(rectF2, 350, 150, mPaint3); /** * 画圆 * 350为矩形x轴长度的一半 * 350为矩形y轴长度的一半 * 当矩形的长和宽相等时,即为圆 */ //方法一:利用矩形绘制椭圆技巧 final RectF rectF3 = new RectF(100, 500, 800, 1200); canvas.drawRoundRect(rectF3, 350, 350, mPaint3); //方法二:550,800代表圆心位置,400代表圆半径 canvas.drawCircle(550, 800, 400, mPaint3); /** * 画圆弧 * 0,90分别代表弧度的起始和结束弧度,顺时针为正,区分数学中的逆时针为正 * 第三个Boolean型参数:true为使用中心点,false为不使用中心点,即为一段弧线(不填充状态下) */ final RectF rectF4 = new RectF(400, 400, 800, 1200); canvas.drawArc(rectF4, 0, 90, true, mPaint4); final RectF rectF5 = new RectF(100, 400, 400, 1200); canvas.drawArc(rectF5, 0, 90, false, mPaint4); } }
SiberiaDante的博客:http://www.cnblogs.com/shen-hua/
SiberiaDante的github地址:https://github.com/SiberiaDante
SiberiaDante的github地址:https://github.com/SiberiaDante