2013-07-22 4 views
0

я пытаюсь показать пули, когда пользователь коснулся экранаAndroid drawBitmap краска

я делаю пулю здесь

public Projectile(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     paint = new Paint(); 
     bulletBitmap = BitmapFactory.decodeResource(context.getResources(), 
                R.drawable.bullet); 
    } 

    public interface ProjectileListener { 
     public void onProjectileChanged(float delta, float angle); 
    } 

    public void setProjectileListener(ProjectileListener l) { 
     listener = l; 
    } 

    public void setProjectileDirection(int x, int y, int size){ 
     pos = new Rect(x, y, size, size); 
     invalidate(); 
    } 

    protected void onDraw(Canvas c) { 
     c.drawBitmap(bulletBitmap, pos, pos, paint); 
     super.onDraw(c); 
    } 

и называют его здесь

Projectile p = new Projectile(TowerAnimation.this); 
         p.setProjectileDirection(x, y, 50); 
         projectiles.add(p); 
         Canvas c = null; 
         p.onDraw(c); 

однако я получаю ошибки в этой строке

c.drawBitmap(bulletBitmap, pos, pos, paint); 

Я сделал что-то неправильно с drawBitmap? благодаря

+0

какая ошибка у вас есть? Вы инициализировали 'bulletBitmap' в конструкторе, который принимает contxt как параметр? – Blackbelt

+0

java.lang.NullPointerException 07-22 16: 03: 23.231: E/AndroidRuntime (8347): \t на android.view.View.dispatchTouchEvent (View.java:5546) 07-22 16: 03: 23.231: E/AndroidRuntime (8347): \t в android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:1951) 07-22 16: 03: 23.231: E/AndroidRuntime (8347): \t в android.view.ViewGroup.dispatchTouchEvent (ViewGroup .java: 1712) 07-22 16: 03: 23.231: E/AndroidRuntime (8347): \t на android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:1957) и вот некоторые другие – NoobMe

+0

Зачем эта строка : "Canvas c = null;"? Вы передаете null методу onDraw и, вероятно, получаете NullPointerException. –

ответ

1

В следующем коде:

Projectile p = new Projectile(TowerAnimation.this); 
        p.setProjectileDirection(x, y, 50); 
        projectiles.add(p); 
        Canvas c = null; <------------------ here 
        p.onDraw(c);  <------------------ NPE 

Вы устанавливаете c в null и передавая ее onDraw(). Это то, что происходит в вашем onDraw():

protected void onDraw(Canvas c) { 
    null.drawBitmap(bulletBitmap, pos, pos, paint); <--------- NPE 
    super.onDraw(c); 
} 

Edit 1:

Я не уверен, что вы пытаетесь сделать с вашим кодом. Проверьте класс BulletsOnScreen. Чтобы использовать его, вам нужно будет добавить его как вид в какой-то макет. Например, если у вас есть LinearLayout, вы можете использовать метод addView():

myLinearLayout.addView(new BulletsOnScreen(this)); 

public class BulletsOnScreen extends View { 

    Bitmap bullet; 

    boolean touched; 

    float xValue, yValue; 

    public BulletsOnScreen(Context context) { 

     super(context); 

     setFocusable(true); 

     bullet = BitmapFactory.decodeResource(context.getResources(), 
               R.drawable.bullet); 

     touched = false; 

    } 

    protected void onDraw(Canvas canvas) { 

     if (touched) { 

      canvas.drawBitmap(bullet, xValue, 
      yValue, null); 

      touched = false; 

     } 
    } 

    public boolean onTouchEvent(MotionEvent event) { 

    xValue = event.getX(); 
    yValue = event.getY(); 

      touched = true; 
      invalidate(); 
    } 
+0

Я пробовал это Canvas c = new Canvas(); , но мне не повезло, что мое изображение все еще не появляется ~ – NoobMe

+0

@NoobMe Check Edit 1 выше. – Vikram

+0

У вас есть идеи, почему я не могу сделать свое изображение на экране? :) – NoobMe

Смежные вопросы