Android通过ImageView添加图像

时间:2012-01-04 14:59:41

标签: android

我有一个ImageView,显示从相机中拍摄的照片。我想要创建的效果是我希望使用OnTouchEvent在ImageView上显示图像。所以说我有五张图片我希望它有五个OnTouchEvent,并且对于屏幕上的每次触摸,新图像将出现在之前显示的图像的顶部(它们是透明的png)。

我已经看过这个问题Adding an Image to a Canvas in Android,但无法理解它。

所以基本上我想要它所以当您在ImageView中查看带有图像的活动时,您可以触摸屏幕,然后在ImageView的图片顶部添加一个png等等6或7张图像。每个都添加了sepertaly所以它需要6次触摸屏幕才能在Imageview

中的当前图像上添加6个png

更新感谢格雷姆

下面的代码已更新我只是在nextBitmap上收到错误nextBitmap cannot be resolved我认为这是因为我需要将其设置为某个位置来处理将添加的图像,例如make一个数组?

更新2

我现在知道我需要一些如何添加一个字符串nextBitmap和图像,以便在触摸屏幕时它会循环抛出它们,任何人都有任何想法?

public class BeatEmUp extends Activity {

Bitmap myBitmap;    

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.beatemup);

    String myRef = this.getIntent().getStringExtra("filepath");
    File imgFile = new  File(myRef);
    Log.e("No ref", myRef);

    if(imgFile.exists()) {
        final Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
        final ImageView myImage = (ImageView) findViewById(R.id.beatemup);
        myImage.setImageBitmap(myBitmap);
        myImage.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                myBitmap = getBitmapOverlay(myBitmap, nextBitmap, 0, 0);
                myImage.setImageBitmap(myBitmap);
            }
        });
    }
}

public static Bitmap getBitmapOverlay(Bitmap bmp1, Bitmap bmp2, int left, int top) {
    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(),  bmp1.getConfig());
    Canvas canvas = new Canvas(bmOverlay);    
    canvas.drawBitmap(bmp1, 0, 0, null);
    canvas.drawBitmap(bmp2, left, top, null);
    return bmOverlay;
}
}

2 个答案:

答案 0 :(得分:4)

来自@ Gabi的回答:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.beatemup);

    String myRef = this.getIntent().getStringExtra("filepath");
    File imgFile = new  File(myRef);
    Log.e("No ref", myRef);

    if(imgFile.exists()) {
        Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
        ImageView myImage = (ImageView) findViewById(R.id.beatemup);
        myImage.setImageBitmap(myBitmap);
        myImage.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                myBitmap = getBitmapOverlay(myBitmap, nextBitmap, 0, 0));
                myImage.setImageBitmap(myBitmap);
            }
        });
    }
}

public static Bitmap getBitmapOverlay(Bitmap bmp1, Bitmap bmp2, int left, int top) {
    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(),  bmp1.getConfig());
    Canvas canvas = new Canvas(bmOverlay);    
    canvas.drawBitmap(bmp1, 0, 0, null);
    canvas.drawBitmap(bmp2, left, top, null);
    return bmOverlay;
}

您需要自己初始化nextBitmap(并在点击图片后对其进行更改)。

答案 1 :(得分:2)

假设bmp1是主位图,请使用:

 public static Bitmap bitmapOverlay(Bitmap bmp1, Bitmap bmp2, int left, int top) {
        Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(),  bmp1.getConfig());
        Canvas canvas = new Canvas(bmOverlay);    
        canvas.drawBitmap(bmp1, 0, 0, null);
        canvas.drawBitmap(bmp2, left, top, null);
        return bmOverlay;
    }