OnClickListener ImageView

D

David HD

Neues Mitglied
0
Ich bin gerade dabei ein Spiel als Schulprojekt zu programmieren. Ich versuche eine Animation mit einem onClickListener zu starten, dieser reagiert aber egal wohin ich klicke. Hab es auch schon mit einem Rectangle probiert. Ich komm einfach nicht dahinter wie das gehen soll. Könnte etwas Hilfe gebrauchen. LG David
 
Dann hängt der onClickListener am falschen View.
 
monsti schrieb:
Dann hängt der onClickListener am falschen View.
Was bedeutet das nun? Bzw. wie kann ich das Problem lösen?
 
Zeig doch mal nen bisschen Code. Deine Aktion soll nehme ich an ausgeführt werden, wenn auf die ImageView geklickt wird oder? Also muss eben der onClickListener an der ImageView hängen. Hört sich irgendwie so an als, als hängt der Listener am kompletten Layout anstatt nur an der ImageView.
Außer du hast was anderes vor, was ich noch nicht verstanden habe. XD
 
Code:
public class JagdActivity extends Activity {

   
    ImageView[] iv;
    int i=0;
    int delay=1000;
    int period=1000;
    Timer timer = new Timer();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_jagd);
        

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        int screeny = getWindowManager().getDefaultDisplay().getHeight();
        int screenx = getWindowManager().getDefaultDisplay().getWidth();
;
        final Handler handler = new Handler(){
            public void handleMessage(Message msg) {  
                super.handleMessage(msg);  
                if(msg.what == 0)  
                {  
                 if(i<9)  
                 {  
                 i++;  
                 iv[1].setImageLevel(i);  
                 }  
                 else  
                 {  
                 i=0;  
                 iv[1].setImageLevel(i);  
                 }  
                }  
         
                }
        };
        
        
        
//Arrays
        int [] iv_x = {0,screenx/8,
                       (int) Math.round(0.52*screenx),(int) Math.round(0.69*screenx),
                       0,(int) Math.round(0.26*screenx),
                       screenx/2 + screenx/35,(int) Math.round(0.8*screenx),
                       (int) Math.round(0.41*screenx)};
        int [] iv_y = {(int) Math.round(0.23*screeny),(int) Math.round(0.04*screeny),
                       (int) Math.round(0.06*screeny),(int) Math.round(0.16*screeny),
                       (int) Math.round(0.67*screeny),screeny/2,
                       (int) Math.round(0.38*screeny),(int) Math.round(0.46*screeny),
                       (int) Math.round(0.73*screeny)};
             
        iv = new ImageView[9];
           
            
            
        
// Maulwürfe
        iv[0] = (ImageView)findViewById(R.id.imageView1);
        iv[1] = (ImageView)findViewById(R.id.imageView2);
        iv[2] = (ImageView)findViewById(R.id.imageView3);
        iv[3] = (ImageView)findViewById(R.id.imageView4);
        iv[4] = (ImageView)findViewById(R.id.imageView5);
        iv[5] = (ImageView)findViewById(R.id.imageView6);
        iv[6] = (ImageView)findViewById(R.id.imageView7);
        iv[7] = (ImageView)findViewById(R.id.imageView8);
        iv[8] = (ImageView)findViewById(R.id.imageView9);
        for(int i =0;i<9;i++){
            iv[i].setPadding(iv_x[i],iv_y[i],0,0);
            iv[i].setVisibility(View.VISIBLE);
        }
      
     
 //Events    
        iv[2].setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View view){
                    
                    timer.scheduleAtFixedRate(new TimerTask()   
                    {   
                        public void run()   
                        {   
                     
                    handler.sendEmptyMessage(0);  
                      
                        }   
                    }, delay, period);
                    
                }
        });
    }
}
 
Sorry aber - nach 3x durchlesen - ich verstehe deinen Code nicht wirklich.

Ich kann die Syntax lesen, jedoch der Sinn erschließt sich noch nicht.

Kannst du vielleicht mit Worten/Skizzen erzählen was passieren soll?
 
@monsti

Soweit ich sehe, ist dies der Programmcode für eine missglückte Animation. Jedes mal, wenn er den OnClickListener auslöst, startet er einen neuen TimerTask (Thread) der ein Animation mit einem Handler triggert.

Leider beendet er seien Tasks nicht. So hat man nach mehren Klicken mehrere Tasks, die alle die gleiche Animation triggern.



@David HD

Dein Code ist schon recht konfus. Ich weiß nicht, wo man hier anfangen soll.
Am besten du machst Dir ein paar Gedanken zu Funktionsweise deines Spiels (Skizze), und fängst noch mal von ganz vorne an.
 

Ähnliche Themen

F
  • Fabicoe
Antworten
1
Aufrufe
917
jogimuc
J
O
Antworten
0
Aufrufe
814
Optimist
O
K
Antworten
1
Aufrufe
928
lordzwieback
lordzwieback
Zurück
Oben Unten