2013-01-05 14 views
6

Ana sınıfımda bir Bitmap nesnesi var. Bu bitmapi, tuvalde daha fazla işlenmek üzere arka plan olarak ayarlamak için özel görüntüleme sınıfıma göndermem gerekiyor. Örneğin, bitmap'i parametre olarak alan setPicture adlı bir yöntem vardır. Peki, bu bitmapi tuval üzerine çizmek nasıl mümkün olabilir?Özel Görünümümün tuvalinde Bitmap görüntüsü nasıl ayarlanır?

aşağıdaki kod bakın:

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

}

Nasıl bu bitmap göndermesi gerektiğini onDraw için? senin onDraw() yöntemle İçinde

cevap

6

,

sadece

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

myBitmap eşlem değişkendir yapmak.

0,0, sol üst köşede çizmek için koordinatları belirtir. yerine ImageView uzanırlar ve bunu başarmak için setImageBitmap(Bitmap src); yöntemi kullanın:

vb Alternatif

More info can be found here in the api docs.

bazı alanlarda çekmek için, diğer Apis mevcut bulunmaktadır.

+2

Doomsknight, çok teşekkürler! Çalışıyor, sen benim günümü yaptın! :)) – Carlos

+0

Sorunun, myBitmap değişkenini MainActivity'den özel görünüme nasıl alacağı olduğunu düşündüm. Cevabınız, myBitmap undefined olacaktır. – Donato

+0

@Donato Sanırım resmin çiziminde özel bir görünüme geçmekten daha fazla sorun yaşadığını gördüm. Basitçe, referans bitmap/kimliğini ayarlayan veya onu yapıcıya bir parametre olarak ekleyen bir yöntem oluşturun. – Doomsknight

0

Bitmap'i çizilebilir hale getirin ve setSetgroundDrawable View sınıfının yöntemini kullanın.

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

Leonidos, ayrıca çalıştığını da teşekkürler, ancak bu yöntemin bileşene sığması için resmi uzattığını fark ettim. Resmimi gerçek boyutta görmek veya doğru oranlarla donatmak mümkün mü? – Carlos

+0

Evet, örneğin BitmapDrawable'ın çekim gücünü "top" olarak ayarlayın. BitmapDrawable hakkında dokümanı okuyun. Çok özellikleri var. – Leonidos

İlgili konular