Android DrawBitmap绘制图像

本文介绍了一个自定义的游戏视图组件,通过实现Runnable接口和onKeyDown方法,实现在Android应用中动态绘制图像并响应键盘输入进行位移控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


package com.Aina.Android;

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.View;

public class GameView extends View implements Runnable {

private Paint mPaint;
private Bitmap mBitqq;
private Bitmap mBitDestTop;
private int movex = 0;
private int DisplayWidth;//屏幕宽带
private int DisplayHeight;//屏幕高度

public GameView(Context context,int DisplayWidth,int DisplayHeight) {
super(context);
this.DisplayWidth = DisplayWidth;
this.DisplayHeight = DisplayHeight;
mPaint = new Paint();
mBitqq = ((BitmapDrawable) this.getResources().getDrawable(
R.drawable.qq)).getBitmap();
mBitDestTop = ((BitmapDrawable) this.getResources().getDrawable(
R.drawable.desktop)).getBitmap();
new Thread(this).start();

}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);// 清屏
canvas.drawBitmap(mBitqq, 0, 0, mPaint);
this.DrawImage(canvas, mBitDestTop, movex, mBitqq.getHeight() + 2,
mBitDestTop.getWidth(), mBitDestTop.getHeight(), 0,0);
}

@Override
public void run() {
while (!Thread.interrupted()) {
try {
Thread.sleep(100);
} catch (Exception ex) {
ex.printStackTrace();
Thread.currentThread().interrupt();
}
this.postInvalidate();
}
}

/**
* x:屏幕上的x坐标 y:屏幕上的y坐标 w:要绘制的图片的宽度 h:要绘制的图片的高度 bx:图片上的x坐标 by:图片上的y坐标
*
* @param canvas
* @param mBitmap
* @param x
* @param y
* @param w
* @param h
* @param bx
* @param by
*/
public void DrawImage(Canvas canvas, Bitmap mBitmap, 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(mBitmap, src, dst, mPaint);
src = null;
dst = null;
}

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
if (this.movex > 0) {
this.movex -= 5;
}
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
if (this.movex + this.mBitDestTop.getWidth() < this.DisplayWidth) {
this.movex += 5;
}
}
return super.onKeyDown(keyCode, event);
}
}




package com.Aina.Android;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.KeyEvent;

public class Test_DrawBitmap extends Activity {
/** Called when the activity is first created. */
private GameView gv = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(dm);
gv = new GameView(this,dm.widthPixels,dm.heightPixels);
setContentView(gv);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return gv.onKeyDown(keyCode, event);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值