2013-01-05 8 views
6

私はメインクラスにビットマップオブジェクトを持っています。このビットマップをカスタムビュークラスに送信して、それをキャンバス上でのさらなる処理の背景として設定する必要があります。私のカスタムビューのキャンバスにビットマップイメージを設定するには?

たとえば、ビットマップをパラメータとして受け取るsetPictureというメソッドがあります。だから、どのようにキャンバスにこのビットマップを描画することは可能ですか?

以下のコードを参照してください:私はonDrawにこのビットマップを送信する必要がありますどのように

public class TouchView extends View { 

final int MIN_WIDTH = 75; 
final int MIN_HEIGHT = 75; 
final int DEFAULT_COLOR = Color.RED; 
int _color; 
final int STROKE_WIDTH = 2; 

private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
private float x, y; 
private boolean touching = false; 

public TouchView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
    init(); 
} 

public TouchView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
    init(); 
} 

public TouchView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    init(); 
} 

private void init() { 
    setMinimumWidth(MIN_WIDTH); 
    setMinimumHeight(MIN_HEIGHT); 
    _color = DEFAULT_COLOR; 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    // TODO Auto-generated method stub 
    setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), 
      MeasureSpec.getSize(heightMeasureSpec)); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 

    if (touching) { 
     paint.setStrokeWidth(STROKE_WIDTH); 
     paint.setColor(_color); 
     paint.setStyle(Paint.Style.FILL); 
     canvas.drawCircle(x, y, 75f, paint); 
    } 
} 

public void setPicture (Bitmap bitmap) { 

     /////// 
     This method must receive my bitmap to draw it on canvas!!!!!!!!!!!!!!! 
     /////// 


} 

public void setColor(int color) { 
    _color = color; 
} 

@Override 
public boolean onTouchEvent(MotionEvent motionEvent) { 
    // TODO Auto-generated method stub 

    switch (motionEvent.getAction()) { 
    case MotionEvent.ACTION_MOVE: 
    case MotionEvent.ACTION_DOWN: 
     x = motionEvent.getX(); 
     y = motionEvent.getY(); 
     touching = true; 
     break; 
    default: 
     touching = false; 
    } 
    invalidate(); 
    return true; 
} 

}

を?あなたのonDraw()メソッド内

答えて

6

はちょうど

canvas.drawBitmap(myBitmap, 0, 0, null); 

myBitmapがあなたのビットマップ変数で行います。

0,0は、描画する座標(別名左上隅)を表します。 代わりにImageViewのを拡張し、これを達成するためにsetImageBitmap(Bitmap src);メソッドを使用します。

等また

More info can be found here in the api docs.

特定の領域に描画するために、他のAPIが利用可能があります。

+2

Doomsknight、ありがとう!それは動作し、あなたは私の一日を作った! :)) – Carlos

+0

私は質問がどのようにMainActivityからカスタムビューにmyBitmap変数を取得すると思った。あなたの答えでは、myBitmapは未定義です。 – Donato

+0

@Donato私は、彼がカスタムビューに渡すよりもイメージを描画することに問題があるのを見たと思います。参照ビットマップ/ IDを設定するメソッドを作成するか、コンストラクタのパラメータとして追加します。 – Doomsknight

0

ビットマップを描画可能に変換し、ViewクラスのsetBackgroundDrawableメソッドを使用します。

public void setPicture (Bitmap bitmap) { 
    setBackgroundDrawable(new BitmapDrawable(bitmap)); 
} 
+0

Leonidos、それも動作してくれてありがとう、しかし、私はこのメソッドは、コンポーネントに合わせて画像を伸ばして気づいた。実際のサイズで写真を見ることができますか、適切な比率で取り付けられていますか? – Carlos

+0

ええ、例えば、BitmapDrawableの重力を「トップ」に設定します。 BitmapDrawableに関するドキュメントを読んでください。それは多くの機能があります。 – Leonidos

関連する問題