android 四张图片,一个固定为背景,另三张实现移动,旋转和缩放 请给出代码
时间: 2024-02-19 09:57:39 浏览: 224
以下是实现该功能的示例代码:
```java
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class ImageManipulationView extends View {
private Bitmap backgroundBitmap;
private Bitmap[] movableBitmaps;
private Matrix[] matrices;
private Paint paint;
public ImageManipulationView(Context context, AttributeSet attrs) {
super(context, attrs);
// 加载背景图片和移动图片
backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background);
movableBitmaps = new Bitmap[3];
movableBitmaps[0] = BitmapFactory.decodeResource(getResources(), R.drawable.image1);
movableBitmaps[1] = BitmapFactory.decodeResource(getResources(), R.drawable.image2);
movableBitmaps[2] = BitmapFactory.decodeResource(getResources(), R.drawable.image3);
// 初始化变换矩阵数组和画笔
matrices = new Matrix[3];
for (int i = 0; i < 3; i++) {
matrices[i] = new Matrix();
}
paint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制背景图片
canvas.drawBitmap(backgroundBitmap, 0, 0, paint);
// 绘制移动图片
for (int i = 0; i < 3; i++) {
canvas.drawBitmap(movableBitmaps[i], matrices[i], paint);
}
// 更新移动图片的变换矩阵
matrices[0].reset();
matrices[0].postTranslate(100, 100);
matrices[1].reset();
matrices[1].postTranslate(200, 200);
matrices[1].postRotate(30);
matrices[2].reset();
matrices[2].postTranslate(300, 300);
matrices[2].postScale(0.5f, 0.5f);
matrices[2].postRotate(-45);
invalidate();
}
}
```
在这个示例中,我们首先加载背景图片和三张移动图片,并初始化变换矩阵数组和画笔。在 `onDraw` 方法中,我们先绘制背景图片,然后循环绘制三张移动图片,并使用对应的变换矩阵进行变换。最后,我们更新移动图片的变换矩阵,并调用 `invalidate` 方法触发下一次绘制。在更新变换矩阵时,我们使用 `postTranslate`、`postRotate` 和 `postScale` 方法实现平移、旋转和缩放操作。
阅读全文