在Android中,项目目录下的"res\drawable" 用来设置该项目的一些图片资源,那么如何来显示这些图片资源呢?Android中提供了Bitmap来存放这些资源,如果大家对android的画图和Animation还不熟悉的话,可以看这里推荐的文章,介绍比较全面 http://byandby.iteye.com/blog/827527

如下代码可以通过一个资源索引获得其图像对象的Bimmap 关于获取图片位图的2种方法请参见这里 http://byandby.iteye.com/blog/828732

((BitmapDrawable) getResources().getDrawable(索引资源)).getBitmap()
这样就可以得到图片资源的Bitmap对象了。

然后使用drawBitmap方法将图片显示到屏幕上。如下代码将一个名为bitmap的Bitmap对象显示在( x , y )坐标上。

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


Bitmap还提供了一些方法,比如getHeight方法和getWidth方法可以获取这个图片的高度和宽度。下面的示例 将显示怎么使用这些方法。这个示例 实现了 图片移动 可以 上下移动 左右移动,移动到手机屏幕的不同地方。通过手机的上下左右键来控制。我们先来看看运行效果。





下边我们就来看看示例代码吧。
我们一共定义了两个类 其中一个是 Activity01类 用来设置布局
Activity01
package xiaohang.zhimeng;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;public class Activity01 extends Activity {private GameView mGameView = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mGameView = new GameView(this);setContentView(mGameView);}public boolean onKeyDown(int keyCode, KeyEvent event) {if (mGameView == null) {return false;}return mGameView.onKeyDown(keyCode, event);}}


另外一个是我们的GameView类 是我们自己定义的一个View类用来实现 事件的监听,以及图片的移动。
GameView
package xiaohang.zhimeng;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;public class GameView extends View implements Runnable {// 声明Paint对象private Paint mPaint = null;// 创建两个图片对象Bitmap mBitmapQQ = null;Bitmap mBitDestTop = null;int miDTX = 0;int miDTY = 0;public GameView(Context context) {super(context);mPaint = new Paint();miDTX = 0; // 代表图片左边的横坐标 用来左右移动图片miDTY = 170;// 代表图片上边的纵坐标 用来上下移动图片/* 从资源文件中装载图片 */// getResources()-->得到Resources// getDrawable()-->得到资源中的Drawable对象,参数为资源索引ID// getBitmap()-->得到BitmapmBitmapQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.xh)).getBitmap();mBitDestTop = ((BitmapDrawable) getResources().getDrawable(R.drawable.chrysler)).getBitmap();new Thread(this).start();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);/* 清屏效果 */canvas.drawColor(Color.GRAY);/* 在屏幕(0,0)处绘制图片mBitQQ */GameView.drawImage(canvas, mBitmapQQ, 0, 0);/* 在指定位置按指定裁剪的区域进行绘制 */// getWidth()-->得到图片的宽度// getHeight()-->得到图片的高度GameView.drawImage(canvas, mBitDestTop, miDTX, miDTY, mBitDestTop.getWidth(), mBitDestTop.getHeight(), 0, 0);}// 触笔事件public boolean onTouchEvent(MotionEvent event) {return true;}// 按键按下事件public boolean onKeyDown(int keyCode, KeyEvent event) {// 左方向键if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {if (miDTX > 0) {miDTX -= 4;}}// 右方向键else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {if (miDTX + mBitDestTop.getWidth() < 320) {miDTX += 4;}}// 上方向键else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {if (miDTY > 0) {// miDTY + mBitDestTop.getHeight() < 450miDTY -= 4;}}// 下方向键else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {if (miDTY < 322) {miDTY += 4;}}return true;}// 按键弹起事件public boolean onKeyUp(int keyCode, KeyEvent event) {return false;}public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {return true;}// 线程处理@Overridepublic void run() {while (!Thread.currentThread().isInterrupted()) {try {Thread.sleep(100);} catch (InterruptedException e) {Thread.currentThread().interrupt();}// 使用postInvalidate可以直接在线程中更新界面postInvalidate();}}/*--------------------------------- * 绘制图片 * @paramx屏幕上的x坐标 * @paramy屏幕上的y坐标 * @paramw要绘制的图片的宽度 * @paramh要绘制的图片的高度 * @parambx图片上的x坐标 * @paramby图片上的y坐标 *  * @return null ------------------------------------*/public static void drawImage(Canvas canvas, Bitmap blt, int x, int y,int w, int h, int bx, int by) {Rect src = new Rect();// 图片 >>原矩形Rect dst = new Rect();// 屏幕 >>目标矩形src.left = bx;src.top = by;src.right = bx + w;src.bottom = by + h;dst.left = x;dst.top = y;dst.right = x + w;dst.bottom = y + h;// 画出指定的位图,位图将自动--》缩放/自动转换,以填补目标矩形               //这个方法的意思就像 将一个位图按照需求重画一遍,画后的位图就是我们需要的了canvas.drawBitmap(blt, null, dst, null);src = null;dst = null;}/** * 绘制一个Bitmap *  * @param canvas *            画布 * @param bitmap *            图片 * @param x *            屏幕上的x坐标 * @param y *            屏幕上的y坐标 */public static void drawImage(Canvas canvas, Bitmap bitmap, int x, int y) {// 绘制图像 将bitmap对象显示在坐标 x,y上canvas.drawBitmap(bitmap, x, y, null);}}


测试平台android 2.0 大家感兴趣可以去附件下载源码。

更多相关文章

  1. [置顶] Android(安卓)View(一)-View坐标以及方法说明
  2. Android多媒体学习一:Android中Image的简单实例。
  3. Android(安卓)播放Gif 动画
  4. Android(安卓)写一个属于自己的富文本编辑器
  5. Android中View的getX,getY...
  6. 基于开源框架Glide加载Gif资源图到Android(安卓)ImageView中
  7. Android(安卓)图片加载Bitmap OOM错误解决办法
  8. 如何在android 文件选择器中选择多个图片或者视频?
  9. 利用android中的View来画线

随机推荐

  1. 程序员:报警快把我折腾疯了
  2. Vim,第三只手
  3. 【DB笔试面试710】在Oracle中,用哪个参数
  4. 内网绘图服务,老板乐的笑出大金牙
  5. 【DB笔试面试687】在Oracle中,常用的10046
  6. 从源码层次理解Spring事务
  7. 【DB笔试面试683】在Oracle中,什么是ORA-0
  8. 【DB笔试面试684】在Oracle中,什么是DUAL
  9. 【死磕ibatis】SqlMapClient 基本操作示
  10. 【DB笔试面试694】在Oracle中,什么是orato