最近項目中遇到要繪製一個橡皮擦類類似功能的模塊。於是總結了下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();
}
}
}
}