Android绘图基础
2016-04-06 21:09
435 查看
Android绘图基础
了解前端的都知道H5里面有Canvas,Android里面也有Canvas,接下来我们会逐步使用Canvas来绘制一些基本图形,了解Canvas绘图机制。获取Canvas对象
获取canvas对象有三种方式:重写View的onDraw方法
自己创建Canvas对象,代码如下
Bitmap b = Bitmap.createBitmap(100,100, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b);
调用SurfaceHolder.lockCanvas(),返回一个Canvas对象
Canvas的常用方法
1)填充drawARGB(int a, int r, int g, int b)
drawColor(int color)
drawRGB(int r, int g, int b)
drawColor(int color, PorterDuff.Mode mode)
2)几何图形
canvas.drawArc (扇形)
canvas.drawCircle(圆)
canvas.drawOval(椭圆)
canvas.drawLine(线)
canvas.drawPoint(点)
canvas.drawRect(矩形)
canvas.drawRoundRect(圆角矩形)
canvas.drawVertices(顶点)
cnavas.drawPath(路径)
3)图片
canvas.drawBitmap (位图)
canvas.drawPicture (图片)
4)文本
canvas.drawText
接下来我们对Canvas进行基本的应用,新建项目,新建MyView继承自View,重写onDraw方法获取Canvas对象,代码如下:
import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; /** * Created by tuozhaobing on 16-4-6. * Add Some Description There */ public class MyView extends View { public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } }
Canvas作为画布,要画东西自然也要有画笔的出现,所以我们新建Paint对象,并对Paint对象进行基本的初始化,随后我们使MyView实现Runnable接口,通过一个线程控制绘制,观察Canvas绘制效果,完整的MyView代码如下:
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; /** * Created by tuozhaobing on 16-4-6. * Add Some Description There */ public class MyView extends View implements Runnable{ private Paint mPaint; public MyView(Context context) { super(context); initPaint(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); initPaint(); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); } public void initPaint(){ mPaint = new Paint(); /*抗锯齿*/ mPaint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); /*设置画布颜色*/ canvas.drawColor(Color.BLACK); /*设置裁剪区域*/ canvas.clipRect(10, 10, 280, 260); /*保存*/ canvas.save(); /*旋转画布*/ canvas.rotate(45.0f); /*设置画笔颜色*/ mPaint.setColor(Color.GREEN); canvas.drawRect(new Rect(15, 15, 140, 70), mPaint); canvas.restore(); mPaint.setColor(Color.RED); canvas.drawRect(new Rect(150,75,260,120),mPaint); } @Override public void run() { while (!Thread.currentThread().isInterrupted()){ try { Thread.sleep(100); }catch (InterruptedException e){ Thread.currentThread().interrupt(); } //在副线程刷新UI postInvalidate(); } } }
在MainActivity中如下使用:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView myView = new MyView(this); setContentView(myView); } }
运行效果如下:
相关文章推荐
- Android Studio SVN使用和VisualSVN-Server配置(图解)
- Android 学习记录-加载菜单
- android 跑马灯效果的基本实现以及自定义实现一个界面多个跑马灯效果
- Android 用代码实现防打扰【能够屏蔽电话和短信】
- Android实现修改状态栏颜色
- Android Scroll分析
- android基础总结
- Win7环境下搭建Android安卓开发环境(原创教程)
- Android中通知的简单使用和自定义通知样式
- 对于Android事件分发机制的总结
- Android如何修改gen下的包名
- 任务和回退栈
- Android 高质量高压缩比图像压缩
- android studio 智能提示忽略大小写
- Android应用安全开发之浅谈加密算法的坑
- android获得控件在屏幕中的绝对坐标 getLocationInWindow 和 getLocationOnScreen
- Android textView高度为0的解决方法
- 初学android开发--day02
- Android 开发艺术与探究 第三章 View的事件体系之View的基础知识
- Android Preference类中xml里属性的用法和介绍