2011-03-22 105 views
0

我的項目是關於android.i中的圖像處理。我有一個從資源文件(PNG圖像)加載的位圖。我想畫它。但我不能。 這裏我的代碼片段:在Android中繪製位圖?

mB = BitmapFactory.decodeResource(getResources(), R.drawable.picture); 
Canvas c = new Canvas(mB); 
Paint p = new Paint(); 
c.drawBitmap(mB,0,0,p); 

它沒有工作。代碼是否正確? 。我還有什麼要做的嗎?

回答

2

您應該使用的ImageView來代替,而如果你想用帆布手工繪製的

imageView.setImageResource(R.drawable.picture); 

加載它,你必須使用傳遞到draw()方法的帆布和實現一個自定義視圖。

更新添加例如CustomView:

public class CustomView extends View { 
    private Paint mPaint; 
    private Drawable mDrawable; 

    public CustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mPaint = new Paint(); 
     mDrawable = context.getResources().getDrawable(R.drawable.some_drawable); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     mDrawable.draw(canvas); 
    } 
} 
+0

soryy,我是新的android.I不想使用ImageView,因爲在處理圖像後,我無法使用ImageView進行繪製。我想手動繪製它。你能解釋更多嗎? – lakk 2011-03-22 14:24:25

+0

但我必須使用位圖? – lakk 2011-03-22 14:39:48

0

有一對夫婦的事情,你缺失。

首先,我認爲你誤解了畫布(位圖b)的構造函數。傳入的位圖中有一個畫布會將劃分爲。這可能只是您構建的一個新的位圖。

其次,建議您在視圖的onDraw方法中使用傳遞給您的畫布。據推測,該視圖是您的Activity中的一個,可以通過findViewById從您的XML佈局獲取,也可以構造並傳遞給Activity的onCreate()方法中的setContentView。

因此,您將不得不繼承View並重寫onDraw方法來完成繪圖。喜歡的東西:

public class MyView extends View { 
    @Override 
    public void onDraw (Canvas c) { 
    Bitmap mB = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.picture); 
    c.drawBitmap(mB, 0, 0, null); 
    } 
} 

然後,在你的活動,你需要創建新的視圖中的實例,並通過它的setContentView傳遞到活動:

public class MyActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mv = new MyView(this); 
    setContentView(mv); 
} 

可以代替調用setContentView (View v,ViewGroup.LayoutParameters lp)過載如果你想設置LayoutParameters。

我還沒有測試過這些,但至少應該讓你走上正確的道路。