您的位置:首页 > 移动开发 > Android开发

android开发笔记之多媒体—Canvas的相关方法

2016-05-14 20:50 483 查看
——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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: