在android屏幕下 下 上 左 右 四个方向移动法拉利(Image)
在android屏幕上 上 下 左 右 四个方向移动法拉利(Image)
在Android中,项目目录下的"res\drawable" 用来设置该项目的一些图片资源,那么如何来显示这些图片资源呢?Android中提供了Bitmap来存放这些资源,如果大家对android的画图和Animation还不熟悉的话,可以看这里推荐的文章,介绍比较全面http://byandby.iteye.com/blog/827527
如下代码可以通过一个资源索引获得其图像对象的Bimmap 关于获取图片位图的2种方法请参见这里http://byandby.iteye.com/blog/828732
然后使用drawBitmap方法将图片显示到屏幕上。如下代码将一个名为bitmap的Bitmap对象显示在( x , y )坐标上。
Bitmap还提供了一些方法,比如getHeight方法和getWidth方法可以获取这个图片的高度和宽度。下面的示例 将显示怎么使用这些方法。这个示例 实现了 图片移动 可以 上下移动 左右移动,移动到手机屏幕的不同地方。通过手机的上下左右键来控制。我们先来看看运行效果。



下边我们就来看看示例代码吧。
我们一共定义了两个类 其中一个是 Activity01类 用来设置布局
Activity01
另外一个是我们的GameView类 是我们自己定义的一个View类用来实现 事件的监听,以及图片的移动。
GameView
测试平台android 2.0 大家感兴趣可以去附件下载源码。
在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; @Override public 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()-->得到Bitmap mBitmapQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.xh)) .getBitmap(); mBitDestTop = ((BitmapDrawable) getResources().getDrawable( R.drawable.chrysler)).getBitmap(); new Thread(this).start(); } @Override protected 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() < 450 miDTY -= 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; } // 线程处理 @Override public void run() { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } // 使用postInvalidate可以直接在线程中更新界面 postInvalidate(); } } /*--------------------------------- * 绘制图片 * @param x屏幕上的x坐标 * @param y屏幕上的y坐标 * @param w要绘制的图片的宽度 * @param h要绘制的图片的高度 * @param bx图片上的x坐标 * @param by图片上的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 大家感兴趣可以去附件下载源码。