public class TestView1 extends View {    private Bitmap mBitmap;    private BitmapShader mBitmapShader;    public TestView1(Context context) {        super(context);    }    public TestView1(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub        mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.xyjy2)).getBitmap();        mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);    }    public TestView1(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)    public TestView1(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //绘制直线        Paint paint = new Paint();        paint.setColor(Color.RED);        paint.setStyle(Paint.Style.FILL);        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(10);        paint.setShader(mBitmapShader);        paint.setAntiAlias(true);canvas.drawLine(0, 0, 100, 100, paint);           }}

float []pts = {0,0,100,100,200,200,300,300};canvas.drawLines(pts, paint);


float []pts = {0,0,100,100,200,200,300,300};        canvas.drawPoint(500, 500, paint);canvas.drawPoints(pts, paint);


RectF r = new RectF(100, 100, 400, 500);canvas.drawRect(r, paint);//canvas.drawRect(left, top, right, bottom, paint);

RectF r = new RectF(100, 100, 400, 500);//canvas.drawRect(r, paint);//canvas.drawRect(left, top, right, bottom, paint);        //画圆角矩形        //x-radius ,y-radius圆角的半径canvas.drawRoundRect(r, 30, 30, paint);



canvas.drawCircle(300, 300, 200, paint);


RectF r = new RectF(100, 100, 400, 500);        paint.setColor(Color.GREEN);        canvas.drawOval(r, paint);


RectF r = new RectF(100, 100, 400, 500);//canvas.drawArc(//r,//startAngle, //其实角度,相对X轴正方向//sweepAngle, //画多少角度的弧度//useCenter, //boolean, false:只有一个纯弧线;true:闭合的边//paint);canvas.drawArc(r, 0, 90, true, paint);//顺时针旋转90度


Path path = new Path();path.moveTo(100, 100);//画笔落笔的位置//移动path.lineTo(200, 100);path.lineTo(200, 200);path.cubicTo(250, 200, 350, 300, 450, 400);path.close();canvas.drawPath(path, paint);


//圆角矩形路径        RectF r = new RectF(100, 100, 600, 800);        Path path = new Path();        float radii[] = {10,10,10,10,10,10,50,60};        path.addRoundRect(r, radii, Path.Direction.CCW);        //path.addArc(oval, startAngle, sweepAngle);        canvas.drawPath(path, paint);


//--------------------Canvas变换技巧--------------------------        //1.平移(Translate)        // 绘制坐标系RectF r = new RectF(0, 0, 400, 500);        paint.setColor(Color.GREEN);canvas.drawRect(r, paint);        // 第一次绘制坐标轴        canvas.drawLine(0,0,canvas.getWidth(),0,paint);// X 轴        paint.setColor(Color.BLUE);        canvas.drawLine(0,0,0,canvas.getHeight(),paint);// Y 轴        //平移--即改变坐标原点canvas.translate(50, 50);        // 第二次绘制坐标轴        paint.setColor(Color.GREEN);        canvas.drawLine(0,0,canvas.getWidth(),0,paint);// X 轴        paint.setColor(Color.BLUE);        canvas.drawLine(0,0,0,canvas.getHeight(),paint);// Y 轴        canvas.rotate(45);        // 第三次绘制坐标轴        paint.setColor(Color.GREEN);        canvas.drawLine(0,0,canvas.getWidth(),0,paint);// X 轴        paint.setColor(Color.BLUE);        canvas.drawLine(0,0,0,canvas.getHeight(),paint);// Y 轴

canvas.drawColor(Color.BLUE);RectF r2 = new RectF(0, 0, 400, 500);paint.setColor(Color.RED);//虽然新建了一个画布图层,但是还是会沿用之前设置的平移变换。不可逆的。(save和restore来解决)canvas.drawRect(r2, paint);

//2.缩放ScaleRectF r = new RectF(0, 0, 400, 500);canvas.drawRect(r, paint);paint.setColor(Color.BLUE);        //sx,sy:分别对x/y方向的一个缩放系数,画布的缩放会导致里面所有的绘制的东西都会有一个缩放效果canvas.scale(1.5f, 0.5f);canvas.drawRect(r, paint);
//3.旋转RotateRectF r = new RectF(200, 200, 400, 500);canvas.drawRect(r, paint);paint.setColor(Color.BLUE);canvas.rotate(45);//canvas.rotate(45, 200, 200);canvas.drawRect(r, paint);
//4.斜拉画布SkewRectF r = new RectF(100, 100, 600, 800);canvas.drawRect(r, paint);paint.setColor(Color.BLUE);//sx,sy倾斜度:X轴方向上倾斜60度,tan60=根号3canvas.skew(1.73f, 0);canvas.drawRect(r, paint);

//5.裁剪画布clip        RectF r = new RectF(200, 200, 400, 500);        canvas.drawRect(r, paint);        paint.setColor(Color.BLUE);        canvas.clipRect(new Rect(250, 250, 300, 400));        canvas.drawColor(Color.YELLOW);

// save 和 restore        RectF r = new RectF(0, 0, 400, 500);        paint.setColor(Color.GREEN);        canvas.drawRect(r, paint);        canvas.save();        //平移        canvas.translate(50, 50);        paint.setColor(Color.BLUE);        canvas.drawRect(r, paint);        canvas.restore();        canvas.rotate(45);        paint.setColor(Color.YELLOW);        r = new RectF(0, 0, 200, 200);        canvas.drawRect(r, paint);


 //当canvas执行saveLayer的时候就会新建一个新的画布图层        int layer = canvas.saveLayer(0,0,canvas.getWidth(),canvas.getHeight(),null,Canvas.ALL_SAVE_FLAG);        canvas.drawColor(Color.YELLOW);        canvas.translate(50, 50);        paint.setColor(Color.BLUE);        canvas.drawRect(r, paint);        canvas.restoreToCount(layer);






更多相关文章

  1. android进阶 重写view来实现全新控件
  2. 仿迅雷下载球
  3. Android日历周视图 可添加事件标记
  4. Android中Adapter使用ViewHolder优化
  5. Android(安卓)UI Surface 界面绘制原理
  6. android 使用Shape绘制实用圆圈
  7. Android中View,SurfaceView和GLSurfaceView绘图的区别
  8. 【Android】View类详解 (游戏开发必备)
  9. osg for android 学习之十五:显示图片

随机推荐

  1. 关于android的广播接收器(1)—基础篇
  2. mac 系统下android源码下载以及使用(总结)
  3. Android(安卓)Sip学习(四)Android自带SipDe
  4. 《android framework常用api源码分析》之
  5. Android的消息机制之Handler源码解析
  6. Android菜鸟的成长笔记(6)——剖析源码学自
  7. Android智能手机搜索不到路由器无线信号
  8. Google 推出 Android(安卓)Design 網站,教
  9. Android通过adb查看wifi密码
  10. Android(安卓)NDK开发学习(一)