zoukankan      html  css  js  c++  java
  • android 2D绘图总结1

    1.整体概括: 用"button的绘制"做为实例.
    public class MyButton extends Button {--->继承Button. 一般我们都继承View,没有样式
    public MyButton(Context context) {
    super(context);
    }
    @Override
    protected void onDraw(Canvas canvas) {--->activity加载的时候会自动调用该方法
    super.onDraw(canvas);
    Paint paint = new Paint();--->画笔:具有颜色和样式等
    paint.setColor(Color.RED);
    canvas.drawCircle(30, 30, 30, paint);--->画布: 具有绘制相关方法.
    }
    }
    2.各种图形的绘制
    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //画直线.
    paint.setColor(Color.RED);
    canvas.drawLine(0, 0, 100, 100, paint);
    //画圆
    paint.setColor(Color.YELLOW);
    paint.setStyle(Style.STROKE);//--->设置描边
    paint.setStrokeWidth(3);
    canvas.drawCircle(30, 30, 40, paint);
    //画矩形
    paint.setColor(Color.GREEN);
    canvas.drawRect(102, 102, 150, 150, paint);
    //画椭圆
    paint.setColor(Color.BLUE);
    paint.setStrokeWidth(1);
    RectF oval = new RectF(160, 160, 400, 250);
    canvas.drawOval(oval, paint);
    //画圆角矩形.
    paint.setColor(Color.CYAN);
    canvas.drawRoundRect(oval, 20, 30, paint);
    //画弧
    paint.setColor(Color.WHITE);
    canvas.drawArc(oval, 90, 200, true, paint);
    //画路径
    paint.setColor(Color.GRAY);
    Path path = new Path();
    path.moveTo(10, 170);
    path.lineTo(40, 170);
    //FIXME 这里画的x值必须比上一个小? 必须为锐角?
    path.lineTo(60, 180);
    path.close();
    canvas.drawPath(path, paint);
    }
    3.画Text和Bitmap
    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //画TEXT.这个设置的10,10是按照Text左下角的坐标来显示的.
    paint.setColor(Color.RED);
    canvas.drawText("this is my drawText", 10, 10, paint);
    //画TEXT在path.
    Path path = new Path();
    path.moveTo(50, 50);
    path.lineTo(100, 100);
    path.lineTo(100, 150);
    canvas.drawPath(path, paint);
    paint.setColor(Color.YELLOW);
    canvas.drawTextOnPath("this is my draw use drawTextOnPath", path, 0, 0, paint);
    //画Bitmap(这个方法相当于切割)
    // Bitmap bitmap=((BitmapDrawable) (getResources().getDrawable(R.drawable.ic_launcher))).getBitmap();
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);//上面那种方法也行.
    Rect src = new Rect(0, 0, 30, 30);
    RectF dst = new RectF(11, 11, 60, 60);
    canvas.drawBitmap(bitmap, src, dst, paint);
    //画Bitmap(这回用matrix:就是整图片的一些旋转,平移啥用的)
    matrix.setRotate(60);
    matrix.setScale(3, 3);
    matrix.setSkew(1, 0);
    matrix.setTranslate(100, 100);
    //matrix的三种方法set, pre, post. 用set后面的会覆盖前面的.用pre是在set之前.用post是在set之后.多个pret 和post不会产生覆盖.
    matrix.preScale(1, 3);
    matrix.postRotate(90, 200, 200);
    canvas.drawBitmap(bitmap, matrix, paint);
    }

  • 相关阅读:
    Google基本利用
    sqlmap
    kali中wireshark打开后错误
    Python Flask Jinja2模板引擎
    Python Flask学习
    Python 豆瓣日记爬取
    Python 函数装饰器
    Python 生成器
    ss源码学习--从协议建立到完成一次代理请求
    ss源码学习--工作流程
  • 原文地址:https://www.cnblogs.com/olvo/p/2447233.html
Copyright © 2011-2022 走看看