2013-12-09 88 views
0

我試圖在onDraw()中畫一個jpg到畫布,但是Bitmap類型似乎不可繪製(沒有.draw方法)。我的目標是讓一個可通過觸摸/拖動在屏幕上移動的jpeg。我如何畫這個?向Canvas繪製任意jpeg

這裏是我的構造函數(其中i圖像路徑傳遞給視圖)

public TouchViewClass(Context context, AttributeSet attrs, int defStyle, String picPath) { 
    super(context, attrs, defStyle); 
    this.picPath=picPath; 
} 

這裏是我的onDraw

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Bitmap myImg = BitmapFactory.decodeFile(picPath); 
    canvas.save(); 
    canvas.translate(mPosX, mPosY); 
    //Here is where the bitmap should be drawn 

    canvas.restore(); 
} 
+0

還挺搞砸了這我會在我的問題上得到一個贊成票。有人能幫我理解這個問題出了什麼問題嗎? – TheGeekNess

回答

4

首先,我不會推薦解碼文件中的位圖onDraw()。這種方法被稱爲每一幀,所以你的繪製過程將會非常緩慢。您需要預先解碼您的文件(在您的構造函數中)並在onDraw中重新使用此位圖。

至於實際繪製位圖,您可以通過調用Canvas.drawBitmap()方法輕鬆繪製位圖。

所以基本上你甚至都不需要翻譯的畫布 - 您可以直接指定目的地:

canvas.drawBitmap(bmp, mPosX, mPosY, null); 
+0

啊,你知道我有這個,但它仍然沒有與翻譯仍然在那裏工作。謝謝 – TheGeekNess

0

我會改變接觸到類似的故障實現:

public class TouchViewClass extends View{ 

    private Bitmap myImg; 
    private float mPosX = 0; 
    private float mPosY = 0; 
    private Paint paint = new Paint(); 

    public float getmPosX() { 
     return mPosX; 
    } 

    public void setmPosX(float mPosX) { 
     this.mPosX = mPosX; 
    } 

    public float getmPosY() { 
     return mPosY; 
    } 

    public void setmPosY(float mPosY) { 
     this.mPosY = mPosY; 
    } 

    /** 
    * So you can inflate from XML 
    * @param context 
    * @param attrs 
    */ 
    public TouchViewClass(Context context, AttributeSet attrs) { 
     super(context, attrs); 

    } 

    /** 
    * So you can create in code 
    * @param context 
    * @param attrs 
    * @param picPath 
    */ 
    public TouchViewClass(Context context, AttributeSet attrs, String picPath) { 
     super(context, attrs); 

     setPicPath(context, picPath); 
    } 

    public void setPicPath(Context context, String picPath){ 
     if(!TextUtils.isEmpty(picPath)){ 
      myImg = BitmapFactory.decodeFile(picPath); 
     }else{ 
      Resources resources = context.getResources(); 
      myImg = BitmapFactory.decodeResource(resources, R.drawable.ic_launcher); 
     } 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     canvas.drawBitmap(myImg, mPosX, mPosY, paint); 
    } 

} 
+0

如果你只使用位圖,爲什麼你需要整個'BitmapDrawable'類? –

+0

完全同意你的看法。無需包裝位圖。 –