2012-01-05 63 views
1

好吧,我將首先介紹我的應用程序的基礎知識。到目前爲止,您使用相機拍攝照片,然後將其保存到文件夾中。照片拍完後,一個新的活動打開並在屏幕上顯示ImageView可繪製圖像數組

我想要達到的效果是沿着能夠使用onClick事件在ImageView中的圖片頂部創建png圖層的行。所以說我有5個透明PNG的,我想要有5個onClick事件,每次觸摸屏幕時,新的PNG圖像將顯示在ImageView的圖片頂部,因此需要5個onClick(觸摸屏幕)來顯示所有的透明PNG在圖片的頂部。

我覺得我幾乎沒有與下面的代碼,但我想我需要建立在drawable文件夾需要與每個onClick事件來顯示圖像的array,我覺得數組應該是nextBitmap但不當然。

更新Sparkys回答

我曾嘗試加入private Integer[] nextBitmap = { R.drawable.img1, R.drawable.img2 };但我得到的錯誤The method getBitmapOverlay(Bitmap, Bitmap, int, int) in the type BeatEmUp is not applicable for the arguments (Bitmap, Integer[], int, int)誰知道這可能是我需要添加private Integer[]......onCreate方法之外?

public class Image extends Activity { 

Bitmap myBitmap; 

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

    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; 
} 
} 
+0

如果用戶必須在5個圖像顯示前點擊5次,我不會將它們全部加載到數組中,因爲用戶可能不會點擊5次。這將浪費內存和電池電量。每次用戶點擊時我都會加載它們。 – 2012-01-05 09:58:37

+0

好酷,不知道該怎麼做。 – Matt 2012-01-05 10:03:11

回答

2

好的,我給你做了一個小樣本,可能是你正在尋找的東西。

我打破了我自己的規則,因爲我爲你做了代碼。因爲我知道你是初學者,所以在你使用它之前應該明確地理解下面的代碼

public class Image extends Activity { 

    Bitmap myBitmap; 
    Integer[] mBitmapIds = new Integer[] { R.drawable.ic_launcher, R.drawable.ic_launcher }; 
    Random mRand = new Random(); 

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

     myBitmap = BitmapFactory.decodeResource(getResources(), 
       R.drawable.ic_launcher); 
     final ImageView myImage = (ImageView) findViewById(R.id.imageview); 
     myImage.setImageBitmap(myBitmap); 
     myImage.setOnClickListener(new OnClickListener() { 
      int i = 0; 

      public void onClick(View v) { 
       if (i >= mBitmapIds.length) { 
        i = 0; 
       } 
       myImage.setImageBitmap(getBitmapOverlay(myBitmap, BitmapFactory.decodeResource(getResources(), mBitmapIds[i]), 0, 0)); 
      } 
     }); 
    } 

    public 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); 
     left += mRand.nextInt(20); 
     top += mRand.nextInt(20); 
     canvas.drawBitmap(bmp2, left, top, null); 
     return bmOverlay; 
    } 
} 
0

查看Hello, Views tutorial, GridView chapter瞭解Drawables引用數組的示例。

+0

好,所以它會像'private Integer [] nextBitmap = {R.drawable.img1,R.drawable.img2,};'當我嘗試這個雖然我得到錯誤'方法getBitmapOverlay(Bitmap,Bitmap,int ,int)在BeatEmUp類型中不適用於參數(Bitmap,Integer [],int,int)' – Matt 2012-01-05 10:35:23