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

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);
}
}


运行效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: