Android RotateImageView 可旋转ImageView

  1 package com.droidhen.game.layout;
2
3 import android.content.Context;
4 import android.graphics.Bitmap;
5 import android.graphics.Bitmap.Config;
6 import android.graphics.Canvas;
7 import android.graphics.Paint;
8 import android.graphics.PaintFlagsDrawFilter;
9 import android.graphics.Rect;
10 import android.widget.ImageView;
11
12
13 public class RotateImageView extends ImageView {
14
15 /**旋转角度**/
16 private float _degree;
17 /**旋转中心**/
18 private float _x;
19 private float _y;
20 /** 背景和前景资源 */
21 private Bitmap _bgRes, _fgRes;
22 /** 数字图片资源 */
23 private Bitmap _nums;
24
25 private Bitmap _buffer;
26 private Canvas _canvas;
27 private int start = 0;
28 private int unitx = 29;
29
30 public RotateImageView(Context context) {
31 super(context);
32 _degree = 0f;
33 _x = 0;
34 _y = 0;
35 _nums = BitmapFactory.decodeResource(getResources(), R.drawable.level_num);
36 }
37
38 public void setResIds(int bgResId, int fgResId) {
39 _bgRes = BitmapFactory.decodeResource(getResources(), bgResId);
40 _fgRes = BitmapFactory.decodeResource(getResources(), fgResId);
41 }
42
43 public void setLevel(int level) {
44 String _level = String.valueOf(level);
45 _buffer = Bitmap.createBitmap( _level.length()*(_nums.getWidth()/10), _nums.getHeight(), Config.ARGB_4444);
46 unitx = _nums.getWidth()/10;
47 _canvas = new Canvas(_buffer);
48 for(int i = 0; i <= _level.length()-1; i++){
49 Rect src = new Rect((_level.charAt(i) - '0')*unitx, 0, (_level.charAt(i) - '0' + 1)*unitx, _nums.getHeight());
50 Rect dst = new Rect( i*unitx, 0, (i + 1)*unitx, _nums.getHeight());
51 _canvas.drawBitmap(_nums, src, dst, null);
52 }
53 }
54
55 public void setLevel(int level, int Resid) {
56 _nums = BitmapFactory.decodeResource(getResources(), Resid);
57 String _level = String.valueOf(level);
58 _buffer = Bitmap.createBitmap( _level.length()*(_nums.getWidth()/10), _nums.getHeight(), Config.ARGB_4444);
59 unitx = _nums.getWidth()/10;
60 _canvas = new Canvas(_buffer);
61 for(int i = 0; i <= _level.length()-1; i++){
62 Rect src = new Rect((_level.charAt(i) - '0')*unitx, 0, (_level.charAt(i) - '0' + 1)*unitx, _nums.getHeight());
63 Rect dst = new Rect( i*unitx, 0, (i + 1)*unitx, _nums.getHeight());
64 _canvas.drawBitmap(_nums, src, dst, null);
65 }
66 }
67
68 public void setDegree(float degree) {
69 _degree = degree;
70 }
71
72 public void setDegree(float degree, float x, float y) {
73 _degree = degree;
74 _x = x;
75 _y = y;
76 }
77
78 public float getDegree() {
79 return _degree;
80 }
81
82 public float getRotateX() {
83 return _x;
84 }
85
86 public float getRotateY() {
87 return _y;
88 }
89
90 @Override
91 public void draw(Canvas canvas) {
92 canvas.save();
93 canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
94 canvas.rotate(_degree, _x, _y);
95 canvas.drawBitmap(_bgRes, 0, 0, null);
96 canvas.drawBitmap(_fgRes, 25, 58, null);
97 canvas.drawBitmap(_buffer, (_bgRes.getWidth() - _buffer.getWidth())/2f, 25, null);
98 canvas.restore();
99 }
100
101 }

  

posted on 2011-08-09 18:02  DerDeath  阅读(10444)  评论(0编辑  收藏  举报

导航

"); }); },1000); });