android开发笔记之多媒体—Canvas的相关方法
博客专区 > Mr_Nice 的博客 > 博客详情
android开发笔记之多媒体—Canvas的相关方法
Mr_Nice 发表于1年前
android开发笔记之多媒体—Canvas的相关方法
  • 发表于 1年前
  • 阅读 0
  • 收藏 0
  • 点赞 2
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

——Canvas相关方法

   ——画线:canvas.drawLine(20, 20, 200, 200, paint)

   ——画矩形:canvas.drawRect(20, 20, 200, 200, paint)

   ——画圆:canvas.drawCircle(250, 250, 250, paint);

   ——画扇形:canvas.drawArc(rectF, 0, 90, true, paint)

   ——画三角形:Path path = new Path();
               path.moveTo(250, 0);
            path.lineTo(150, 300);
               path.arcTo(new RectF(150, 200, 350, 400), 0, 180);
                path.lineTo(350, 300);
            path.lineTo(250, 0);
               path.close();
               canvas.drawPath(path, paint);

效果图:

这里写图片描述

核心代码:

public class MainActivity extends Activity {

    private ImageView iv;
    private Bitmap bitmap;//画纸
    private Canvas canvas;//画布
    private Paint paint;//画笔
    private float radius = 60;
    private final static float DEGREE = 36; //五角星角度 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
    }
    //画一条线
    public void drawLine(View view){
        init();
        //第一二参数表示直线的起始点坐标
        //第三四参数表示直线的终点坐标
        canvas.drawLine(20, 20, 200, 200, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个矩形
    public void drawRect(View view) {
        init();
        //第一个参数表示矩形左边距离画布左边的距离
        //第二个参数表示矩形上边距离画布上边的距离
        //第三个参数表示矩形右边距离画布左边的距离
        //第四个参数表示矩形下边距离画布上边的距离
        canvas.drawRect(20, 20, 300, 200, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个圆
    public void drawCircle(View view) {
        init();
        //第一二参数表示圆心的坐标
        //第三个参数表示圆的半径
        canvas.drawCircle(250, 250, 250, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个扇形
    public void drawArc(View view) {
        init();
        RectF rectF = new RectF(20, 20, 500, 500);
        //第一个参数表示矩形
        //第二个参数为起始角度
        //第三参数表示扫过的角度
        //第四个参数表示扇形是否含有矩形的中线
        canvas.drawArc(rectF, -90, 180, true, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个多边形
    public void drawPath(View view) {
        init();
        Path path = new Path();
        //先移动到三角形的第一个点
        path.moveTo(250, 10);
        //再连线到第二个点
        path.lineTo(100, 300);
        //在第二、三个点之间画了一个扇形(以二三点之间连线为轴)
        RectF rectF = new RectF(100, 250, 400, 350);
        path.arcTo(rectF, 0, 180);
        //连线到第三个点
        path.lineTo(400, 300);
        //最后连线回第一个点
        path.lineTo(250, 10);

        canvas.drawPath(path, paint);
        iv.setImageBitmap(bitmap);
    }
    //画一个五角星
    public void drawStar(View view) {
        init();
        paint.setAntiAlias(true);
        Path path = new Path(); 
        float radian = degree2Radian(DEGREE);
        float radius_in = (float) (radius * Math.sin(radian / 2) / Math.cos(radian)); //中间五边形的半径

        path.moveTo((float) (radius * Math.cos(radian / 2)), 0);
        path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in * Math.sin(radian)), (float) (radius - radius * Math.sin(radian / 2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) * 2), (float) (radius - radius * Math.sin(radian / 2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) + radius_in * Math.cos( radian /2)),(float) (radius + radius_in * Math.sin( radian /2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) + radius * Math.sin(radian)), (float) (radius + radius * Math.cos(radian)));
        path.lineTo((float) (radius * Math.cos(radian / 2)), (float) (radius + radius_in));
        path.lineTo((float) (radius * Math.cos(radian / 2) - radius * Math.sin(radian)), (float) (radius + radius * Math.cos(radian)));
        path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in * Math.cos( radian /2)), (float) (radius + radius_in * Math.sin(radian / 2)));
        path.lineTo(0, (float) (radius - radius * Math.sin(radian /2)));
        path.lineTo((float) (radius * Math.cos(radian / 2) - radius_in * Math.sin(radian)) , (float) (radius - radius * Math.sin(radian /2)));

        path.close();
        canvas.drawPath(path, paint); 
        iv.setImageBitmap(bitmap);
    }
    //初始化画布和画布的一些设置
    private void init() {
        bitmap = bitmap.createBitmap(500, 500, Config.ARGB_8888);
        canvas = new Canvas(bitmap);
        //设置画板的颜色
        canvas.drawColor(Color.BLACK);
        paint = new Paint();
// paint.setStyle(Style.STROKE); //设置画笔风格为空心
        paint.setColor(Color.RED); //设置画笔的颜色
        paint.setStrokeWidth(5);    //设置画笔的粗细
        paint.setAntiAlias(true);   //抗锯齿
    }
    /** * 角度转弧度 * @param degree * @return */
    private float degree2Radian(float degree){
        return (float) (Math.PI * degree / 180);
    }
}
共有 人打赏支持
粉丝 0
博文 47
码字总数 39947
×
Mr_Nice
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: