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); } }
相关文章推荐
- Android学习笔记十一:Android 中关于 【Cursor】 类的介绍
- IntentSerivce实现原理
- Android实战制作简易天气预报软件
- Android ActionBarSherlock使用教程
- Android并发编程之白话文详解Future,FutureTask和Callable
- Android并发编程之图文解析volatile关键字
- Android5种方式存储数据:
- GitHub排名前100的Android开源库
- Android(java)学习笔记208:Android下的属性动画高级用法(Property Animation)
- android开发笔记之多媒体—图片的颜色处理
- Android 常用Adapter(ArrayAdapter ,SimpleAdapter ,BaseAdapter )的具体用法
- android onUserLeaveHint和onUserInteraction
- Android telnet RPi 2B
- Android(java)学习笔记207:Android下的属性动画(Property Animation)
- Android 图片压缩
- Android APK反编译详解
- android项目中R文件丢失的解决方法
- [Android] ButterKnifeProcessor 工作流程分析
- Android 禁止输入emoji表情符号
- Android中通过代码加载自定义的view