CanvasView
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();//旋转动画}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.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 < height; i++) {for (int j = 0; j < width; j++) {int index = i * width + j;// 获取RGB值int r = (bitmap[index] >> 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 << 16) | (G << 8) | Bbitmap[index] = 0xff000000 | ((int) gray << 16)| ((int) gray << 8) | (int) gray;}}Bitmap bm = Bitmap.createBitmap(width, height, Config.ARGB_4444);bm.setPixels(bitmap, 0, width, 0, 0, width, height);mBitmap = bm;bitmap = null;return mBitmap;}/** * 透明度渐变动画 */public void alphaAnimation() {Animation alpha = new AlphaAnimation(0.0f, 1.0f);alpha.setDuration(3000);this.startAnimation(alpha);}/** * 平移动画 */public void translateAnimation() {Animation translate = new TranslateAnimation(10, 100, 10, 100);translate.setDuration(3000);this.startAnimation(translate);}/** * 缩放动画 */public void scaleAnimation() {Animation scale = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);scale.setDuration(3000);this.startAnimation(scale);}/** * 旋转动画 */public void rotateAnimation() {Animation rotate = new RotateAnimation(0.0f, 360.0f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);rotate.setDuration(3000);this.startAnimation(rotate);}}


CanvasDemoActivity
package com.sonzer.CanvasDemo;import android.app.Activity;import android.os.Bundle;public class CanvasDemoActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        CanvasView view=new CanvasView(this);        setContentView(view);    }}

更多相关文章

  1. Android(安卓)gallery 实现定时滑动并添加动画效果
  2. android TextView 设置部分文本 边框和样式
  3. android 开发:绘制简单折线图表
  4. android Toast工具BToast
  5. Android之Spinner解析
  6. Android逐帧动画的实现
  7. Android(安卓)动画监听器
  8. android字体闪烁动画(线程)
  9. android字体闪烁动画(线程)

随机推荐

  1. android:listview实现qq,微信好友列表(头像
  2. 编译移植android 2.3到tiny210
  3. 关于Android短信管理
  4. Android启动脚本init.rc
  5. 【Android】20.0 第20章 音频、视频、拍
  6. Android(安卓)Makefile分析
  7. Android开发者必须深入学习的10个应用开
  8. android 2d物理引擎-Box2d
  9. Android(安卓)实用工具Hierarchy Viewer
  10. Android的布局和Intent笔记和常用实例