2011-04-27 33 views
0

我正試圖在彼此之上放置兩張圖片。最重要的是透明的。在他們之上,我試圖添加一個透明的畫布,以便用戶可以繪製,鍵入,無論他們需要做什麼,底部的兩個圖像都可見。分層圖像加上畫布

所以我可以得到兩個圖像顯示或只是畫布。每次我嘗試顯示畫布時,似乎都會覆蓋覆蓋它們的兩幅圖像。

這裏是我迄今爲止..

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
    setContentView(new MyView(this)); 

..... some code to set up the paint 
} 

private Paint  mPaint; 
private MaskFilter mEmboss; 
private MaskFilter mBlur; 

public class MyView extends View { 

     private static final float MINP = 0.25f; 
     private static final float MAXP = 0.75f; 

     private Bitmap mBitmap; 
     private Canvas mCanvas; 
     private Path mPath; 
     private Paint mBitmapPaint;     

     public MyView(Context c) { 
      super(c);      

      // Creating a new relative layout add the definition again.  
      RelativeLayout relativeLayout = new RelativeLayout(TwoPicksOnEachOther.this);     
      // Setting the orientation to vertical   
      ////relativeLayout.setOrientation(LinearLayout.VERTICAL);     

      // Creating Fish image  
      final ImageView iv = new ImageView(TwoPicksOnEachOther.this);   
      iv.setImageResource(R.drawable.fish2); 
      // relative layout parameters 
      RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(  
        RelativeLayout.LayoutParams.FILL_PARENT, 
        RelativeLayout.LayoutParams.FILL_PARENT);   
      //iv.setId(1);       
      relativeLayout.addView(iv,lp);   

      // Creating transparent image with boat. 
      final ImageView iv2 = new ImageView(TwoPicksOnEachOther.this); 
      iv2.setImageResource(R.drawable.ctdeasytwo); 
      //iv2.setId(2); 
      RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(  
        RelativeLayout.LayoutParams.FILL_PARENT, 
        RelativeLayout.LayoutParams.FILL_PARENT); 
      relativeLayout.addView(iv2,lp2);  

      mBitmap = Bitmap.createBitmap(480, 800, Bitmap.Config.ARGB_8888); 
      //mBitmap = BitmapFactory.decodeResource(getResources(), 
      //  R.drawable.ctdeasytwo);      
      mCanvas = new Canvas(mBitmap); 
      // mCanvas.drawBitmap(mBitmap, 10, 10, null); 
      mPath = new Path(); 
      mBitmapPaint = new Paint(Paint.DITHER_FLAG); 

     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
      canvas.drawColor(Color.TRANSPARENT); 

      canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

      canvas.drawPath(mPath, mPaint); 
     } 

................... More code to manage touch events. 

現在我懷疑畫布是不是相對佈局的一部分。這可能是問題嗎?如果是,我不能做relativeLayout.addView(mCanvas,lp);

有什麼建議嗎?

回答

1

對不起不得不等待八個小時回答我的問題。

我能夠解決這個問題。我創建了一個班。

public class newClass extends View { 
public newClass (Context context){ super(context); } 
... 
@Override protected void onDraw(Canvas canvas) { 
canvas.drawColor(Color.TRANSPARENT); } 

那麼我不得不這樣做

final newClass myCanvas = new newClass (this); 

relativeLayout.addView(myCanvas,lp2); 

正常工作......

+0

我必須等待17個小時才能接受我自己的答案...... Don'y很好地說明了這些規則... – George 2011-04-29 00:30:13

+0

閱讀[this] (http://meta.stackexchange.com/questions/6044/why-must-i-wait-2-days-before-accepting-my-own-answer)找出原因。 – dandan78 2011-04-29 16:47:58

0

U可以參考這個 Image in Canvas with touch events

+0

尊敬的hotveryspicy,感謝您的輸入,但我可能會被誤解。我可以管理平局和所有觸摸事件。困難在於將三個物體重疊在一起。 – George 2011-04-27 17:45:39

+0

我的canavas是thransparent。沒有下面的圖像正在改變。畫布填充透明 canvas.drawColor(Color.TRANSPARENT); – George 2011-04-27 17:48:14

+0

我能解決這個問題。我創建了一個班。 public class newClass extends View {public newClass(Context context){super(context); } ... @Override protected void onDraw(Canvas canvas){canvas.drawColor(Color.TRANSPARENT); } 然後,我只需要做 final newClass myCanvas = new newClass(this); relativeLayout.addView(myCanvas,lp2); 工作正常... – George 2011-04-27 23:57:52

1

我能夠做到通過做類似的事情(油漆與它後面的背景位圖透​​明畫布)以下(只顯示部分代碼):

public class MyView extends View { 
    public MyView(Context c) { 
     super(c); 
     Bitmap tmpBitmap; 

     // Create the background bitmap and convert it to a drawable object 
     mBackBitmap = Bitmap.createBitmap(tmpBitmap, 0, 0, tmpBitmap.getWidth(), tmpBitmap.getHeight(), aMatrix, false); 
     mBackBitmapDrawable = new BitmapDrawable(mBackBitmap); 
     // Set the drawable object as the background 
     setBackgroundDrawable(mBackBitmapDrawable); 
     // Create an empty bitmap for the canvas 
     mBitmap = Bitmap.createBitmap(tmpBitmap.getWidth(), tmpBitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     mCanvas = new Canvas(mBitmap); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     //Log.d("MyView", "onDraw"); 
     // Use transparent background 
     canvas.drawColor(Color.TRANSPARENT); 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint); 
    } 
} 

希望它有幫助。