Android绘图基础之: Canvas 和 Paint
2016-06-24 21:42
399 查看
Android 绘图应该继承 View组件,并重写它的 onDraw(Canvas canvas)方法即可.
package com.test.canvasdemo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.graphics.Shader; import android.util.AttributeSet; import android.view.View; /** * Created by Administrator on 2016/6/24. */ public class MyView extends View { public MyView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); //把整张画布设置成白色 canvas.drawColor(Color.WHITE); Paint paint = new Paint(); //设置画笔 paint.setAntiAlias(true); //设置 抗锯齿 paint.setColor(Color.BLUE); //设置 画笔颜色 paint.setStyle(Paint.Style.STROKE); //设置画笔的填充风格 paint.setStrokeWidth(3); //设置画笔的触屏宽度 //绘制圆形 canvas.drawCircle(40, 40, 30, paint); //绘制正方形 canvas.drawRect(10, 80, 70, 140, paint); //绘制矩形 canvas.drawRect(10, 150, 70, 190, paint); //绘制圆角矩形 RectF rel = new RectF(10, 200, 70, 230); canvas.drawRoundRect(rel, 15, 15, paint); //绘制椭圆 RectF rell = new RectF(10, 240, 70, 270); canvas.drawOval(rell, paint); //定义一个 path对象,封闭成一个三角形 Path path1 = new Path(); path1.moveTo(10, 340); path1.lineTo(70, 340); path1.lineTo(40, 290); path1.close(); //根据Path进行绘制,绘制三角形 canvas.drawPath(path1, paint); //定义一个path 对象封闭成一个五角星 Path path2 = new Path(); path2.moveTo(26, 360); path2.lineTo(54, 360); path2.lineTo(70, 392); path2.lineTo(40, 420); path2.lineTo(10, 392); path2.close(); canvas.drawPath(path2, paint); //*************设置填充风格后的绘制______________------- paint.setStyle(Paint.Style.FILL); paint.setColor(Color.RED); canvas.drawCircle(120, 40, 30, paint); //绘制正方形 canvas.drawRect(90, 80, 150, 140, paint); //绘制矩形 canvas.drawRect(90, 150, 150, 190, paint); RectF re2 = new RectF(90, 200, 150, 230); //绘制圆角矩形 canvas.drawRoundRect(re2,15,15,paint); //绘制椭圆 RectF re21 = new RectF(90,240,150,270); canvas.drawOval(re21,paint); Path path3 = new Path(); path3.moveTo(90,340); path3.lineTo(150, 340); path3.lineTo(120,290); path3.close(); //绘制三角形 canvas.drawPath(path3,paint); //绘制5角形 Path path4 = new Path(); path4.moveTo(106,360); path4.lineTo(134, 360); path4.lineTo(150, 392); path4.lineTo(120, 420); path4.lineTo(90,392); path4.close(); canvas.drawPath(path4, paint); //************设置渐变器后绘制************ Shader shader = new LinearGradient(0,0,40,60, new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW,},null,Shader.TileMode.REPEAT); paint.setShader(shader); //设置阴影 paint.setShadowLayer(45, 10, 10, Color.GRAY); //绘制圆形 canvas.drawCircle(200, 40, 30, paint); //绘制正方形 canvas.drawRect(170, 80, 230, 140, paint); //绘制矩形 canvas.drawRect(170, 150, 230, 190, paint); //绘制圆角矩形 RectF ref3 = new RectF(170,200,230,230); canvas.drawRoundRect(ref3, 15, 15, paint); //绘制椭圆 RectF ref31 = new RectF(170,240,230,240); canvas.drawOval(ref31, paint); Path path5 = new Path(); path5.moveTo(170, 340); path5.lineTo(230, 340); path5.lineTo(200,290); path5.close(); canvas.drawPath(path5, paint); //绘制五角形 Path path6 = new Path(); path6.moveTo(186, 360); path6.lineTo(214, 360); path6.lineTo(230, 392); path6.lineTo(200,420); path6.lineTo(170, 392); path6.close(); canvas.drawPath(path6, paint); //------------设置字符大小后的绘制----- paint.setTextSize(24); paint.setShader(null); //绘制7个字符串 canvas.drawText(getResources().getString(R.string.circle),240,50,paint); canvas.drawText(getResources().getString(R.string.square),240,120,paint); canvas.drawText(getResources().getString(R.string.rect),240,175,paint); canvas.drawText(getResources().getString(R.string.round_rect),230,220,paint); canvas.drawText(getResources().getString(R.string.oval),240,260,paint); canvas.drawText(getResources().getString(R.string.triangle),240,325,paint); canvas.drawText(getResources().getString(R.string.pentagon),240,390,paint); } }
布局文件
只是在布局文件中 引用了自定义的 View组件<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <com.test.canvasdemo.MyView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
主界面 很简单
package com.test.canvasdemo; import android.app.Activity; import android.os.Bundle; /** * Canvas("画布") 和 Paint("画笔") */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
相关文章推荐
- AsyncTask
- 如何获取注册高德Key使用的SHA1值与包名?
- Android Parcelable的写法
- 移动混合开发之android文件管理-->flexbox,webFont。
- Android二维码扫描开发(一):实现思路与原理
- Android初级教程理论知识(第十章Fragment与动画)
- Android初级教程理论知识(第十章Fragment与动画)
- Android-2016后半年的学习计划
- android中的service与Activity之间的通信
- Android Studio中获取sha1证书指纹
- 通过sdk工具 aapt.exe 获取apk的信息
- Android学习推荐!
- Android常用的一些make命令
- android Studio导入aar
- 横竖屏的切换
- [置顶] Android之Notification的多种用法
- Android Studio真机测试失败-----''No target device found"
- ionic-Android-icon图标-splash启动页-常用尺寸(像素)
- android:screenOrientation属性
- Android数据持久化的方法