Android 常用的画图方法

package com.sonzer.CanvasDemo;


import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Bitmap.Config;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.RectF;

import android.graphics.drawable.BitmapDrawable;

import android.view.View;

import android.view.animation.AlphaAnimation;

import android.view.animation.Animation;

import android.view.animation.RotateAnimation;

import android.view.animation.ScaleAnimation;

import android.view.animation.TranslateAnimation;

/**

 * 绘图常用方法演示

 * @author sonzer

 *

 */

public class CanvasView extends View {

private Paint mPaint1 = null;

private Bitmap mBitmap = null;


public CanvasView(Context context) {

super(context);

// 初始化画笔

mPaint1 = new Paint();

mPaint1.setColor(Color.RED);// 设置笔刷颜色

mPaint1.setStrokeWidth(2);// 设置笔刷粗细

mPaint1.setAntiAlias(true);// 设置抗锯齿

//初始化图片

mBitmap = ((BitmapDrawable) getResources().getDrawable(

R.drawable.sonzer_pic)).getBitmap();


mBitmap = rotate(mBitmap, 10, 0, 0);// 图像旋转

mBitmap = scale(mBitmap, 0.3f, 0.3f, 0, 0);// 图像缩放

mBitmap = dispose(mBitmap, mBitmap.getWidth(), mBitmap.getHeight());// 灰度处理

// 抗锯齿(感觉不明显)

// canvas.setDrawFilter(new PaintFlagsDrawFilter(0,

// Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));


alphaAnimation();//透明度渐变动画

//translateAnimation();//平移动画

//scaleAnimation();//缩放动画

//rotateAnimation();//旋转动画

}


@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

canvas.drawColor(Color.WHITE);// 设置画布背景颜色

canvas.clipRect(0, 0, 320, 480);// 设置画布范围


canvas.drawLine(20, 20, 100, 30, mPaint1);// 绘制线段

canvas.drawPoint(60, 50, mPaint1);// 绘制点

canvas.drawRect(new Rect(20, 70, 120, 100), mPaint1); // 绘制矩形

canvas.drawRoundRect(new RectF(140, 70, 230, 100), 10, 10, mPaint1); // 绘制圆角矩形

canvas.drawCircle(50, 140, 30, mPaint1);// 绘制圆形

canvas.drawArc(new RectF(140, 110, 230, 170), 180, 90, true, mPaint1);// 绘制圆弧

canvas.drawOval(new RectF(240, 110, 280, 170), mPaint1);// 绘制椭圆形

canvas.drawText("绘制文字", 20, 200, mPaint1);// 绘制文字

float[] points = new float[] { 35, 220, 20, 250, 20, 250, 50, 250, 35,

220, 50, 250 };

canvas.drawLines(points, mPaint1);// 绘制线段序列,相当3条线,6个坐标



canvas.drawBitmap(mBitmap, 20, 270, null);// 绘制图片


}


/**

* 图像旋转

* 

* @param mBitmap

* @param angle

* @param px

* @param py

* @return

*/

public Bitmap rotate(Bitmap mBitmap, float angle, float px, float py) {

Matrix matrix = new Matrix();

matrix.reset();

matrix.setRotate(angle, px, py);

mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),

mBitmap.getHeight(), matrix, true);

return mBitmap;

}


/**

* 图像缩放

* 

* @param sx

* @param sy

* @param px

* @param py

* @return

*/

public Bitmap scale(Bitmap mBitmap, float sx, float sy, float px, float py) {

Matrix matrix = new Matrix();

matrix.reset();

matrix.setScale(sx, sy, px, py);

mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),

mBitmap.getHeight(), matrix, true);

return mBitmap;

}


/**

* 灰度处理

* 

* @param mBitmap

* @param width

* @param height

* @return

*/

public Bitmap dispose(Bitmap mBitmap, final int width, final int height) {

int bitmap[] = new int[width * height];

mBitmap.getPixels(bitmap, 0, width, 0, 0, width, height);

for (int i = 0; i > 16) & 0xff;

int g = (bitmap[index] >> 8) & 0xff;

int b = (bitmap[index]) & 0xff;

// 计算灰度值

double gray = r * 0.3 + g * 0.59 + b * 0.11;

// 0xff000000 | (R 
<div class="iteye-blog-content-contain" style="font-size: 14px"></div>

猜你喜欢

转载自shangxun.iteye.com/blog/1938003