您的位置:首页 > 移动开发 > Android开发

Android应用开发揭秘的第14个程序5_9_MatrixScaleImg修改版和高仿版的源码注释

2012-11-11 21:31 246 查看
//前两天说的"eclips软件突然死机",现在家里创建android项目时,也是类似死机无反应,然后我断开网络后就OK了。前两天是看无反应就强关闭(资源管理器关闭进程).

////学会运用mMatrix.postScale缩放图片 mMatrix.postScale(Scale,Scale);

Activity01.java

package com.MatrixScaleImg;

import android.app.Activity;

import android.os.Bundle;

import android.view.KeyEvent;

public class Activity01 extends Activity

{

private GameView mGameView = null;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

mGameView = new GameView(this);

setContentView(mGameView);

}

public boolean onKeyUp(int keyCode, KeyEvent event)

{

super.onKeyUp(keyCode, event);

return true;

}

public boolean onKeyDown(int keyCode, KeyEvent event)

{

if ( mGameView == null )

{

return false;

}

if ( keyCode == KeyEvent.KEYCODE_BACK)

{

this.finish();

return true;

}

return mGameView.onKeyDown(keyCode,event);

}

}

GameView.java

package com.MatrixScaleImg;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Matrix;

import android.graphics.drawable.BitmapDrawable;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.View;

public class GameView extends View implements Runnable

{

/* 声明Bitmap对象 */

Bitmap mBitQQ = null;

int BitQQwidth = 0;

int BitQQheight = 0;

float Scale = 1.0f;

/* 构建Matrix对象 */

Matrix mMatrix = new Matrix();

public GameView(Context context)

{

super(context);

/* 装载资源 */

mBitQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.qq)).getBitmap();

/* 得到图片的宽度和高度 */

BitQQwidth = mBitQQ.getWidth();

BitQQheight = mBitQQ.getHeight();

/* 开启线程 */

new Thread(this).start();

}

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 onTouchEvent(MotionEvent event)

{

return true;

}

// 按键按下事件

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;

}

// 按键弹起事件

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();

}

}

/**

* 绘制一个Bitmap

* @param canvas 画布

* @param bitmap 图片

* @param x 屏幕上的x坐标

* @param y 屏幕上的y坐标

*/

public static void drawImage(Canvas canvas, Bitmap bitmap, int x, int y)

{

/* 绘制图像 */

canvas.drawBitmap(bitmap, x, y, null);

}

}

Gf_MatrixScaleImgActivity.java

package pak.GfMatrixScaleImg;

import android.app.Activity;

import android.os.Bundle;

import android.view.KeyEvent;

public class Gf_MatrixScaleImgActivity extends Activity

{

private GameView mGameView = null;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

mGameView = new GameView(this);

setContentView(mGameView);

}

public boolean onKeyUp(int keyCode, KeyEvent event)

{

super.onKeyUp(keyCode, event);

return true;

}

public boolean onKeyDown(int keyCode, KeyEvent event)

{

if ( mGameView == null )

{

return false;

}

if ( keyCode == KeyEvent.KEYCODE_BACK)

{

this.finish();

return true;

}

return mGameView.onKeyDown(keyCode,event);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐