为了制作一个简单的游戏,我使用了一个模板来绘制带有这样的位图的画布:
private void doDraw(Canvas canvas) {
for (int i=0;i<8;i++)
for (int j=0;j<9;j++)
for (int k=0;k<7;k++) {
canvas.drawBitmap(mBits[allBits[i][j][k]], i*50 -k*7, j*50 -k*7, null); } }
Run Code Online (Sandbox Code Playgroud)
(画布在"run()"中定义/ SurfaceView存在于GameThread中.)
我的第一个问题是如何清除(或重绘)整个画布以获得新的布局?
其次,如何更新屏幕的一部分?
// This is the routine that calls "doDraw":
public void run() {
while (mRun) {
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
if (mMode == STATE_RUNNING)
updateGame();
doDraw(c); }
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c); } } } }
Run Code Online (Sandbox Code Playgroud) 我有一组位图.它们在某种程度上都是透明的,我事先并不知道哪些部分是透明的.我想从原始位图创建一个新的位图,它排除透明部分,但是在正方形中.我认为这张图片解释了它:

我知道如何从现有位图创建位图,但我不知道如何找出哪个部分是透明的以及如何使用它来实现我的目标.
这就是我计划这样做的方式:
public Bitmap cutImage(Bitmap image) {
Bitmap newBitmap = null;
int width = image.getWidth();
int height = image.getHeight();
newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newBitmap);
//This is where I need to find out correct values of r1 and r1.
Rect r1 = new Rect(?, ?, ?, ?);
Rect r2 = new Rect(?, ?, ?, ?);
canvas.drawBitmap(image, r1, r2, null);
return newBitmap;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何实现这一目标?
编辑:
我使用以下算法来查找left,right,top和bottom值:
private int x1;
private int x2;
private int y1;
private …Run Code Online (Sandbox Code Playgroud)