2014-08-31 46 views
-1

我有這個應用程序,它基本上是一個'取笑'的應用程序,我用一個人的臉和使用手槍,自動步槍或手榴彈射擊它(更多的武器來:-))。ImageView.setImageResource無法顯示正確的可繪製

我有一個武器類,下面的代碼。 (我很新到Java所以原諒我,如果我未能遵守證明的方式,或儘可能高效地我應該做的事情)

public class Weapon { 
    // Parent 
    public static MainActivity ma; 

    // Constants 
    public static final int BULLET_WIDTH = 97; 
    public static final int BULLET_HEIGHT = 92; 
    public static final int EXPLOD_WIDTH = 299; 
    public static final int EXPLOD_HEIGHT = 237; 
    public static final int PISTOL = 0; 
    public static final int RIFLE = 1; 
    public static final int GRENADE = 2; 

    protected static int[] position = {0, 0}; 
    protected static RelativeLayout rl = null; 
    protected static MediaPlayer mp; 

    // Protected stuff 
    // Object variables. 
    protected int type; 
    protected int drawableEffect; 
    protected int soundEffect; 

    // Functionals 
    protected ImageView effectImage; 

    public void equipWeapon() { 
     // Clear any existing listeners and assign a new one. 
     MainActivity.mainImage.setOnTouchListener(null); 
     MainActivity.mainImage.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
      // Which weapon are we using? 
       switch (type) { 
       case Weapon.PISTOL: 
       case Weapon.GRENADE: 
        if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        // Fire the weapon. 
        fireWeapon(v, event); 
       } 
       case Weapon.RIFLE: 
        switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
        case MotionEvent.ACTION_MOVE: // This doesn't work ??? 
         // Fire the weapon. 
         fireWeapon(v, event); 
        } 
       } 

       // perfomClick needed. 
       return v.performClick(); 
      } 

     }); 
    } 

    public void fireWeapon(View v, MotionEvent event) { 
     // Reference the layout. 
     Weapon.rl = (RelativeLayout)Weapon.ma.findViewById(R.id.relativeLayout); 

     // Define properties. 
     RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT);  

     // Get the touch position. 
     Weapon.position[0] = (int)event.getX() - ((type == Weapon.PISTOL || type ==  Weapon.RIFLE) ? Weapon.BULLET_WIDTH:Weapon.EXPLOD_WIDTH); 
     Weapon.position[1] = (int)event.getY() - ((type == Weapon.PISTOL || type ==  Weapon.RIFLE) ? Weapon.BULLET_HEIGHT:Weapon.EXPLOD_HEIGHT); 

     // Set the position. 
     lp.setMargins(Weapon.position[0], Weapon.position[1], 0, 0); 
     effectImage.setLayoutParams(lp); 

     // Add the view to the layout. 
     Weapon.rl.addView(effectImage, lp); 

     // Play the sound. 
     Weapon.mp.seekTo(0); 
     Weapon.mp.start(); 

     // Reload 
     reload(); 
    } 

    public void reload() { 
     // Create the ImageView 
     this.effectImage = new ImageView(Weapon.ma); 
     this.effectImage.setImageResource(this.drawableEffect); 
    } 
} 

而且我有延伸武器

public class Pistol extends Weapon { 

    public Pistol() { 
     // First save the type. 
     this.type = Weapon.PISTOL; 

     // Fetch the sound effect and image. 
     this.soundEffect = R.raw.gunshot; 
     this.drawableEffect = R.drawable.bullet_hole1; 

     // Create the media player and initialize the sound. 
     Weapon.mp = MediaPlayer.create(Weapon.ma, this.soundEffect); 

     // Create the ImageView 
     this.effectImage = null; 
     this.effectImage = new ImageView(Weapon.ma); 
     this.effectImage.setImageResource(this.drawableEffect); 
    } 
} 
手槍類

以及擴展武器

public class Rifle extends Weapon { 

    public Rifle() { 
     // First save the type. 
     this.type = Weapon.RIFLE; 

     // Fetch the sound effect and image. 
     this.soundEffect = R.raw.gunshot; 
     this.drawableEffect = R.drawable.bullet_hole1; 

     // Create the media player and initialize the sound. 
     Weapon.mp = MediaPlayer.create(Weapon.ma, this.soundEffect); 

     // Create the ImageView 
     this.effectImage = null; 
     this.effectImage = new ImageView(Weapon.ma); 
     this.effectImage.setImageResource(this.drawableEffect); 
    } 
} 

步槍班終於,我有延伸的手榴彈類,沒錯,你猜對了,武器也是如此。

public class Grenade extends Weapon { 

    public Grenade() { 
     // First save the type. 
     this.type = Weapon.GRENADE; 

     // Fetch the sound effect and image. 
     this.soundEffect = R.raw.grenade; 
     this.drawableEffect = R.drawable.boom; 

     // Create the media player and initialize the sound. 
     Weapon.mp = MediaPlayer.create(Weapon.ma, this.soundEffect); 

     // Create the ImageView 
     this.effectImage = new ImageView(Weapon.ma); 
     this.effectImage.setImageResource(this.drawableEffect); 
    } 
} 

我在我所註冊的onClick監聽器,以便您可以切換武器,以自己的喜好。這裏的主視圖按鈕是一個例子:

grenadeButton = (ImageButton)findViewById(R.id.grenadeButton); 
    grenadeButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (MainActivity.this.weapon != Weapon.GRENADE) { 
       // Change the background color. 
       resetButtons(); 
       v.setBackgroundResource(R.drawable.background_selected); 

       // Change weapons. 
       MainActivity.this.currentWeapon = equipWeapon(Weapon.GRENADE); 
      }   
     } 
    }); 

,並在裝備武器的方法主要活動。

public Weapon equipWeapon(int type) { 
    Weapon weapon = null; 
    switch (type) { 
    case Weapon.PISTOL: 
     weapon = new Pistol(); 
     break; 
    case Weapon.RIFLE: 
     weapon = new Rifle(); 
     break; 
    case Weapon.GRENADE: 
     weapon = new Grenade(); 
     break; 
    } 

    // Play a sound and save changes. 
    MainActivity.this.weapon = type; 
    MainActivity.mp.seekTo(0); 
    MainActivity.mp.start(); 

    return weapon; 
} 

現在,我感謝您花時間審查所有這些代碼。我知道這很重要,因爲我認爲這是一個簡單的問題。我也知道這個論壇的規則,我已經試圖搜索這個問題,但我不知道我是否使用了正確的查詢,因爲我沒有發現任何與此問題有關的問題。

這裏,我們去:

當你啓動應用程序,手槍自動配備這樣你就可以立即開始拍攝。它拍得很好,我得到了一顆子彈的噪音,以及人臉臉上的子彈痕跡^ _ ^。步槍也能很好地工作(但它使用與手槍相同的噪音和圖形,所以它也可能失敗,請參閱下文)。

當我切換到手榴彈,我在這裏一個可愛的爆炸聲,但顯示的圖像仍然是一個彈孔,而不是爆炸..我有沒有世俗的想法如何解決這一問題,我難倒..

當我創建了手榴彈對象我專門分配繪製資源實例變量...

this.drawableEffect = R.drawable.boom; 

然而,它仍顯示R.drawable.bullet_hole1 ....

請讓我知道如果你需要更多的信息並提出任何問題y OU需要..

謝謝您的時間..

+0

什麼是反對票?我無法弄清楚,所以我來到這裏......我遵循了在這裏提出問題的指導方針(徹底解釋了情況,提供了代碼等)。 – 2014-09-04 03:25:57

回答

0

我這麼笨.....

MainActivity.equipWeapon 

不叫

Weapon.equipWeapon.... 

所以武器沒有改變...... Oy'vey ...