大體思路,首先Bitmap.createBitmap建立位元影像,然後自訂函數drawIntoBitmap,最後通過onDraw建立畫布來實現繪製的位元影像
package com.example;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader;
import android.os.Bundle;
import android.view.View;
public class AlphaBitmapActivity extends Activity {
public Bitmap mBitmap1, mBitmap2, mBitmap3;
public Shader mShader;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
public class SampleView extends View {
public SampleView(Context context) {
super(context);
setFocusable(true); //控制項允許擷取焦點
InputStream is = context.getResources().openRawResource(R.drawable.sample);
mBitmap1 = Bitmap.createBitmap(200, 200, Bitmap.Config.ALPHA_8);
drawIntoBitmap(mBitmap3、1);
/*產生 LinearGradient對象
new LinearGradien(0,0,100,100,Color.RED,Color.BLUE,Shader.TileMode.MIRROR);
參數一:為漸層起點座標的x軸位置,
參數二 :為漸層起點座標的y軸位置,
參數三 :為漸層終點座標的x軸位置,
參數四 :為漸層終點座標的y軸位置,
參數五 :平鋪方式,這裡設定為鏡像
*/
mShader = new LinearGradient(0, 0, 300, 500, new int[] {
Color.RED, Color.GREEN, Color.BLUE}, null, Shader.TileMode.MIRROR);
}
/*繪製位元影像*/
public void drawIntoBitmap(Bitmap bm) {
float x = bm.getWidth();
float y = bm.getHeight();
Canvas c = new Canvas(bm);
Paint p = new Paint();
p.setAntiAlias(true);
p.setAlpha(0x80);
c.drawCircle(x/2, y/2, x/2, p);
p.setAlpha(0x80);
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
p.setTextSize(60);
p.setTextAlign(Paint.Align.CENTER);
Paint.FontMetrics fm = p.getFontMetrics();
c.drawText("Alpha", x/2, y/2-fm.ascent/2, p); //"Alpha"字串在繪製的圓形中的文字
}
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE); //畫布底色設為白色
Paint p = new Paint();
p.setColor(Color.RED); //設定文字顏色
p.setTextSize(36); //設定文字大小
p.setShader(mShader); //設定映像陰影製作效果
canvas.drawBitmap(mBitmap1, bw, bh, p);
/*得到畫布寬度高度*/
float cw= canvas.getWidth();
float ch = canvas.getHeight();
canvas.drawText("寬度 "+cw+" 高度 "+ ch, 50, 50, p);
}
}
}
結果
另外說明的是 注意canvas.drawText()和canvas.drawBitmap()
drawText(String text, float x, float y, Paint paint) 中x,y是從字串的左下角開始,y是字串的baseline
drawBitmap(Bitmap bitmap, float left, float top, Paint paint)中x,y是產生位元影像的左上方的點到畫布左邊和上邊的距離