最近项目中遇到要绘制一个橡皮擦类类似功能的模块。于是总结了下Paint的属性
1. 图形绘制 画线 画图片等
列出一些重要的属性
1. setARGB(int a,int r,int g,int b); //设置绘制的颜色,a代表透明度,r,g,b代表颜色值。
2.setAlpha(int a); //a[0..255] 0:代表全透明 255代表不透明
3.setStrokeWidth(int);//设置画笔的大小
4.setStrokeCap(Cap cap);//设置笔刷的样式 Paint.Cap.Round ,Cap.SQUARE等分别为圆形、方形
5.setStyle(Style style);//画笔样式。 Paint.Style.STROKE为一条线。Paint.Style.FILL是从起点开始。一直到终点为止,形成一扇形的绘制区。Paint.Style.FILL_AND_STROKE 为扇形区再加上一个圈
6. setShadowLayer(float radius ,float dx,float dy,int color);
//在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色
7.setXfermode(Xfermode xfermode);
// 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果
2.文本绘制
这里文本有人总结了挺好的,不浪费时间 给连接http://hi.baidu.com/982012087/item/4879442440d49dc0a417b645
3、案例分析
package com.example.drawbeforebkg;
import android.R.integer;
import android.app.Activity;
import android.content.Context;
import android.graphics.AvoidXfermode.Mode;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuffXfermode;
import android.graphics.Xfermode;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
public class MainActivity extends Activity {
Path path = new Path();
private CircleView mGameView =null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
mGameView = new CircleView(this);
mGameView.setBackgroundDrawable(getResources().getDrawable(R.drawable.logo) );//设置的背景图片
setContentView(mGameView);
}
class CircleView extends View implements Runnable{
int x,y;
Canvas canvas;
Bitmap resizedBitmap1 ;
Paint paint;
private int oldx ,oldy;
DisplayMetrics dm = new DisplayMetrics();
CircleView(Context context)//构造函数
{
super(context);
getWindowManager().getDefaultDisplay().getMetrics(dm); // 获取手机屏幕的大小
int view_w = dm.widthPixels;
int view_h = dm.heightPixels;
paint=new Paint();
paint.setStrokeWidth(20); //当Style为STROKE或者为FILL——OR——STROKE
paint.setColor(Color.RED); //设置颜色值
paint.setAlpha(100);//设置透明度
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.CLEAR));
//paint.setAntiAlias(false);
// paint.setDither(true);//设置是否使用图像抖动处理,会使画笔更平滑饱满。图像更清晰
resizedBitmap1 = Bitmap.createBitmap(view_w, view_h, Config.ARGB_8888);
canvas = new Canvas(resizedBitmap1);//第一步:构造函数中,将resizedBitmap1作为画布背景
new Thread(this).start();
}
public boolean onTouchEvent(MotionEvent event)
{
x=(int) event.getX();
y=(int) (event.getY());
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
path.moveTo(x, y);
oldx = x;
oldy = y;
break;
case MotionEvent.ACTION_MOVE:
//path.lineTo(x, y);
path.quadTo(oldx, oldy, x, y);
canvas.drawPath(path, paint);//第二步:指定轨迹画图,将path画在画布上
oldx = x;
oldy = y;
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(resizedBitmap1,0,0,paint);//第三步:时刻显示画布上的布景
}
public void run()
{
while (!Thread.currentThread().isInterrupted())
{
try
{
Thread.sleep(20);
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
}
// 使用postInvalidate可以直接在线程中更新界面
postInvalidate();
}
}
}
}