当前位置: 编程技术>移动开发
本页文章导读:
▪利用Matrix对图片处置 利用Matrix对图片处理
1、放大、缩小
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
/* 重置mMatrix */
mMatrix.reset();
/* 设置缩放 */
mMatrix.postScale(Scale,Scale);
/* 按mMatrix得旋转构建新的.........
▪ 使用proguard进行代码混淆时的有关问题 使用proguard进行代码混淆时的问题
当使用proguard.cfg进行代码混淆的时候
如果遇到错误提示:
Proguard returned with error code 1.
解决方法是:去掉 Android SDK 路径上的所有空格。
在Eclipse: Window >.........
▪ 承继view的两种绘图方式 继承view的两种绘图方式
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
im.........
[1]利用Matrix对图片处置
来源: 互联网 发布时间: 2014-02-18
利用Matrix对图片处理
1、放大、缩小
public void onDraw(Canvas canvas) { super.onDraw(canvas); /* 重置mMatrix */ mMatrix.reset(); /* 设置缩放 */ mMatrix.postScale(Scale,Scale); /* 按mMatrix得旋转构建新的Bitmap */ Bitmap mBitQQ2 = Bitmap.createBitmap(mBitQQ, 0, 0, BitQQwidth,BitQQheight, mMatrix, true); /* 绘制旋转之后的图片 */ GameView.drawImage(canvas, mBitQQ2, (320-BitQQwidth)/2, 10); mBitQQ2 = null; }
// 按键按下事件 public boolean onKeyDown(int keyCode, KeyEvent event) { //左方向键 if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { if ( Scale > 0.3 ) { Scale-=0.1; } } //右方向键 else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { if ( Scale < 1.5 ) { Scale+=0.1; } } return true; }
最后使用postInvalidate可以直接在线程中更新界面 postInvalidate();
2、旋转
mMatrix.rotate(角度);
[2] 使用proguard进行代码混淆时的有关问题
来源: 互联网 发布时间: 2014-02-18
使用proguard进行代码混淆时的问题
当使用proguard.cfg进行代码混淆的时候
如果遇到错误提示:
Proguard returned with error code 1.
解决方法是:去掉 Android SDK 路径上的所有空格。
在Eclipse: Window > Preferences > Android > SDK Location中,
例如你填入的是
D:\Program Files\android-sdk_r11-windows\android-sdk-windows
“Program Files”中有一个空格,故出错。
你可以这样填写
D:\Progra~1\android-sdk_r11-windows\android-sdk-windows
(在64位机器上可能是D:\Progra~2\android-sdk_r11-windows\android-sdk-windows)
就不会出现上述错误了。
1 楼
scry5566
2011-09-29
哥 你是神一般的人那!
太感谢了!我赶巧碰到这样问题,网上一群假高手,各种麻烦的解决办法都有,没想到让你这么蜻蜓点水一下就搞定,出了膜拜,还能怎么说?
太感谢了!我赶巧碰到这样问题,网上一群假高手,各种麻烦的解决办法都有,没想到让你这么蜻蜓点水一下就搞定,出了膜拜,还能怎么说?
2 楼
haiyangzhy
2011-10-17
写的很好,我遇到这个问题,看了,解决了,谢谢博主
[3] 承继view的两种绘图方式
来源: 互联网 发布时间: 2014-02-18
继承view的两种绘图方式
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; public class GameView extends View implements Runnable { /* 声明Paint对象 */ private Paint mPaint = null; private GameView2 mGameView2 = null; public GameView(Context context) { super(context); /* 构建对象 */ mPaint = new Paint(); mGameView2 = new GameView2(context); /* 开启线程 */ new Thread(this).start(); } public void onDraw(Canvas canvas) { super.onDraw(canvas); /* 设置画布为黑色背景 */ canvas.drawColor(Color.BLACK); /* 取消锯齿 */ mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); { /* 定义矩形对象 */ Rect rect1 = new Rect(); /* 设置矩形大小 */ rect1.left = 5; rect1.top = 5; rect1.bottom = 25; rect1.right = 45; mPaint.setColor(Color.BLUE); /* 绘制矩形 */ canvas.drawRect(rect1, mPaint); mPaint.setColor(Color.RED); /* 绘制矩形 */ canvas.drawRect(50, 5, 90, 25, mPaint); mPaint.setColor(Color.YELLOW); /* 绘制圆形(圆心x,圆心y,半径r,p) */ canvas.drawCircle(40, 70, 30, mPaint); /* 定义椭圆对象 */ RectF rectf1 = new RectF(); /* 设置椭圆大小 */ rectf1.left = 80; rectf1.top = 30; rectf1.right = 120; rectf1.bottom = 70; mPaint.setColor(Color.LTGRAY); /* 绘制椭圆 */ canvas.drawOval(rectf1, mPaint); /* 绘制多边形 */ Path path1 = new Path(); /*设置多边形的点*/ path1.moveTo(150+5, 80-50); path1.lineTo(150+45, 80-50); path1.lineTo(150+30, 120-50); path1.lineTo(150+20, 120-50); /* 使这些点构成封闭的多边形 */ path1.close(); mPaint.setColor(Color.GRAY); /* 绘制这个多边形 */ canvas.drawPath(path1, mPaint); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(3); /* 绘制直线 */ canvas.drawLine(5, 110, 315, 110, mPaint); } // //下面绘制实心几何体 // mPaint.setStyle(Paint.Style.FILL); { /* 定义矩形对象 */ Rect rect1 = new Rect(); /* 设置矩形大小 */ rect1.left = 5; rect1.top = 130+5; rect1.bottom = 130+25; rect1.right = 45; mPaint.setColor(Color.BLUE); /* 绘制矩形 */ canvas.drawRect(rect1, mPaint); mPaint.setColor(Color.RED); /* 绘制矩形 */ canvas.drawRect(50, 130+5, 90, 130+25, mPaint); mPaint.setColor(Color.YELLOW); /* 绘制圆形(圆心x,圆心y,半径r,p) */ canvas.drawCircle(40, 130+70, 30, mPaint); /* 定义椭圆对象 */ RectF rectf1 = new RectF(); /* 设置椭圆大小 */ rectf1.left = 80; rectf1.top = 130+30; rectf1.right = 120; rectf1.bottom = 130+70; mPaint.setColor(Color.LTGRAY); /* 绘制椭圆 */ canvas.drawOval(rectf1, mPaint); /* 绘制多边形 */ Path path1 = new Path(); /*设置多边形的点*/ path1.moveTo(150+5, 130+80-50); path1.lineTo(150+45, 130+80-50); path1.lineTo(150+30, 130+120-50); path1.lineTo(150+20, 130+120-50); /* 使这些点构成封闭的多边形 */ path1.close(); mPaint.setColor(Color.GRAY); /* 绘制这个多边形 */ canvas.drawPath(path1, mPaint); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(3); /* 绘制直线 */ canvas.drawLine(5, 130+110, 315, 130+110, mPaint); } /* 通过ShapeDrawable来绘制几何图形 */ mGameView2.DrawShape(canvas); } // 触笔事件 public boolean onTouchEvent(MotionEvent event) { return true; } // 按键按下事件 public boolean onKeyDown(int keyCode, KeyEvent event) { return true; } // 按键弹起事件 public boolean onKeyUp(int keyCode, KeyEvent event) { return false; } public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { return true; } public void run() { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } //使用postInvalidate可以直接在线程中更新界面 postInvalidate(); } } }
2、使用ShapeDrawable
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Path; import android.graphics.Rect; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.graphics.drawable.shapes.PathShape; import android.graphics.drawable.shapes.RectShape; import android.view.View; //通过ShapeDrawable来绘制几何图形 public class GameView2 extends View { /* 声明ShapeDrawable对象 */ ShapeDrawable mShapeDrawable = null; public GameView2(Context context) { super(context); } public void DrawShape(Canvas canvas) { /* 实例化ShapeDrawable对象并说明是绘制一个矩形 */ mShapeDrawable = new ShapeDrawable(new RectShape()); //得到画笔paint对象并设置其颜色 mShapeDrawable.getPaint().setColor(Color.RED); Rect bounds = new Rect(5, 250, 55, 280); /* 设置图像显示的区域 */ mShapeDrawable.setBounds(bounds); /* 绘制图像 */ mShapeDrawable.draw(canvas); /*=================================*/ /* 实例化ShapeDrawable对象并说明是绘制一个椭圆 */ mShapeDrawable = new ShapeDrawable(new OvalShape()); //得到画笔paint对象并设置其颜色 mShapeDrawable.getPaint().setColor(Color.GREEN); /* 设置图像显示的区域 */ mShapeDrawable.setBounds(70, 250, 150, 280); /* 绘制图像 */ mShapeDrawable.draw(canvas); Path path1 = new Path(); /*设置多边形的点*/ path1.moveTo(150+5, 80+80-50); path1.lineTo(150+45, 80+80-50); path1.lineTo(150+30, 80+120-50); path1.lineTo(150+20, 80+120-50); /* 使这些点构成封闭的多边形 */ path1.close(); //PathShape后面两个参数分别是宽度和高度 mShapeDrawable = new ShapeDrawable(new PathShape(path1,150,150)); //得到画笔paint对象并设置其颜色 mShapeDrawable.getPaint().setColor(Color.BLUE); /* 设置图像显示的区域 */ mShapeDrawable.setBounds(100, 170, 200, 280); /* 绘制图像 */ mShapeDrawable.draw(canvas); } }
如果你只想改变画布中的一个图形,而其它图形不变,需要用到canvas.save() 锁定画布,与canvas.restore()解除画布锁定
最新技术文章: