Eine bestimmte sich bewegende ImageView stoppen

  • Antworten:2
Musab Kurt
  • Forum-Beiträge: 3

24.05.2013, 14:42:54 via Website

Ich versuche eine ImageView zu stoppen die später dann verschwindet. Aber wenn ich eine stoppe, fängt gleich wieder die vorher gestoppte ImageView an sich weiter zu bewegen. Das stoppen und bewegen findet in der Methode mueckenBewegen statt. Ich würde mich freuen wenn ihr mir helfen könntet

1public class GameActivity extends Activity implements Runnable,OnClickListener {
2
3 private static final int INTERVALL = 10;
4 private static final int ZEITSCHEIBEN = 3000;
5 private Random zufallsgenerator = new Random();
6 private Handler handler = new Handler();
7 private FrameLayout spielbereich;
8 private int runde;
9 private int punkte;
10 private int muecken;
11 private int gefangeneMuecken;
12 private int zeit;
13 private int schwierigkeitsgrad;
14 public int bewegung=0;
15 private float massstab;
16 private static final long HOECHSTALTER_MS = 2000;
17 private MediaPlayer mp;
18 private MediaPlayer tod;
19 ImageView muecke;
20
21
22 //private static final int MUECKEN_BILDER[][] = { {R.drawable.muecke_nw, R.drawable.muecke_n, R.drawable.muecke_no},
23 // {R.drawable.muecke_w, R.drawable.muecke, R.drawable.muecke_o},
24 // {R.drawable.muecke_sw, R.drawable.muecke_s, R.drawable.muecke_so} };
25 private static final String HIMMELSRICHTUNGEN[][] = {
26 {"nw","n","no"},
27 {"w", "", "o"},
28 {"sw", "s", "so"} };
29 AnimationDrawable blutAnimation;
30
31
32
33 /** Called when the activity is first created. */
34 @Override
35 public void onCreate(Bundle savedInstanceState) {
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.game);
38 spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
39 mp = MediaPlayer.create(this,R.raw.summen);
40 tod = MediaPlayer.create(this,R.raw.tod);
41 massstab = getResources().getDisplayMetrics().density;
42 schwierigkeitsgrad = getIntent().getIntExtra("schwierigkeitsgrad", 0);
43 spielStarten();
44 }
45
46
47 private void spielStarten() {
48 runde = 0;
49 punkte = 0;
50 starteRunde();
51 }
52
53 private void starteRunde() {
54 runde = runde + 1;
55 muecken = runde * (20);
56 gefangeneMuecken = 0;
57 zeit = ZEITSCHEIBEN;
58 int id = getResources().getIdentifier("hintergrund"+Integer.toString(runde), "drawable", this.getPackageName());
59 if(id>0) {
60 LinearLayout l = (LinearLayout) findViewById(R.id.hintergrund);
61 l.setBackgroundResource(id);
62 }
63 bildschirmAktualisieren();
64 handler.postDelayed(this,INTERVALL);
65 }
66
67
68
69 private boolean pruefeRundenende() {
70 if (zeit == 0) {
71 starteRunde();
72 return true;
73 } else if(gefangeneMuecken==runde * (20)){
74 punkte = (int) (punkte + (10*zeit*(schwierigkeitsgrad*0.5+1)));
75 starteRunde();
76 return true;
77 }
78 return false;
79 }
80
81 private boolean pruefeSpielende() {
82 if (zeit == 0 && gefangeneMuecken < muecken) {
83 gameOver();
84 return true;
85 }
86 return false;
87 }
88
89 private void gameOver() {
90 setResult(punkte);
91 mp.stop();
92 tod.stop();
93 Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
94 dialog.setContentView(R.layout.gameover);
95 dialog.show();
96 //startActivity(new Intent(this, Gameover.class));
97
98 }
99
100
101 private void zeitHerunterzaehlen() {
102 zeit = zeit - 1;
103
104 float zufallszahl = zufallsgenerator.nextFloat();
105 double wahrscheinlichkeit = muecken * (1.5+ (schwierigkeitsgrad*0.1)) / ZEITSCHEIBEN;
106 if (wahrscheinlichkeit >1 ) {
107 eineMueckeAnzeigen();
108 if (zufallszahl < wahrscheinlichkeit - 1) {
109 eineMueckeAnzeigen();
110 }
111 } else {
112 if (zufallszahl < wahrscheinlichkeit) {
113 eineMueckeAnzeigen();
114 }
115 }
116 mueckenVerschwinden();
117 mueckenBewegen();
118 bildschirmAktualisieren();
119 if(!pruefeSpielende()) {
120 if(!pruefeRundenende()) {
121 handler.postDelayed(this, INTERVALL);
122 }
123 }
124 }
125
126
127 private void bildschirmAktualisieren() {
128 TextView tvPunkte = (TextView) findViewById(R.id.points);
129 tvPunkte.setText(Integer.toString(punkte));
130 TextView tvRunde = (TextView) findViewById(R.id.round);
131 tvRunde.setText(Integer.toString(runde));
132 TextView tvTreffer= (TextView) findViewById(R.id.hits);
133 tvTreffer.setText(Integer.toString(gefangeneMuecken));
134 TextView tvRestzeit = (TextView) findViewById(R.id.time);
135 tvRestzeit.setText(Integer.toString(zeit));
136 FrameLayout flTreffer = (FrameLayout)findViewById(R.id.bar_hits);
137 LayoutParams lpTreffer = flTreffer.getLayoutParams();
138 lpTreffer.width = Math.round( massstab * 300 * Math.min( gefangeneMuecken,muecken) / muecken );
139 FrameLayout flZeit = (FrameLayout)findViewById(R.id.bar_time);
140 LayoutParams lpZeit = flZeit.getLayoutParams();
141 lpZeit.width = Math.round( massstab * zeit * 300 / ZEITSCHEIBEN );
142 }
143
144
145 private void eineMueckeAnzeigen() {
146
147 int breite = spielbereich.getWidth();
148 int hoehe = spielbereich.getHeight();
149
150 muecke = new ImageView(this);
151
152 muecke.setTag(R.id.geburtsdatum, new Date());
153 muecke.setOnClickListener(this);
154 int muecke_breite = (int)Math.round(massstab*50);
155 int muecke_hoehe = (int)Math.round(massstab*42);
156 int links = zufallsgenerator.nextInt(breite-muecke_breite);
157 int oben = zufallsgenerator.nextInt(hoehe-muecke_hoehe);
158
159 int vx;
160 int vy;
161 do {
162 vx = zufallsgenerator.nextInt(3)-1;
163 vy = zufallsgenerator.nextInt(3)-1;
164 } while(vx==0 && vy==0);
165
166 setzeMuecke(muecke, vx, vy);
167
168 double faktor = 1.0;
169 if(vx!=0 && vy!=0) {
170 faktor = 0.707;
171 }
172 vx = (int)Math.round(massstab*vx*faktor);
173 vy = (int)Math.round(massstab*vy*faktor);
174
175 muecke.setTag(R.id.vx, new Integer(vx));
176 muecke.setTag(R.id.vy, new Integer(vy));
177
178
179
180 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_breite,muecke_hoehe);
181 params.leftMargin = links;
182 params.topMargin = oben;
183 params.gravity= Gravity.TOP + Gravity.LEFT;
184
185 Animation animationAuftauchen = AnimationUtils.loadAnimation(this, R.anim.auftauchen);
186 muecke.startAnimation(animationAuftauchen);
187 spielbereich.addView(muecke,params);
188 mp.seekTo(0);
189 mp.start();
190
191 }
192
193
194
195 private void setzeMuecke(ImageView muecke, int vx, int vy) {
196 muecke.setImageResource( getResources().getIdentifier("muecke_"+HIMMELSRICHTUNGEN[vy+1][vx+1], "drawable", this.getPackageName() ) );
197 }
198
199 private void mueckenBewegen() {
200 spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
201
202 int nummer=0;
203 while(nummer<spielbereich.getChildCount()) {
204 muecke = (ImageView) spielbereich.getChildAt(nummer);
205 //int vx = (Integer) muecke.getTag(R.id.vx);
206 //int vy = (Integer) muecke.getTag(R.id.vy);
207 // und nun bewegen...
208
209 muecke = (ImageView) spielbereich.getChildAt(nummer);
210 int vx = (Integer) muecke.getTag(R.id.vx);
211 int vy = (Integer) muecke.getTag(R.id.vy);
212 FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) muecke.getLayoutParams();
213 if(muecke.getDrawable()!=blutAnimation){
214 bewegung=1;
215 } else {
216 bewegung=0;
217 }
218 /*if(muecke.getDrawable()!=blutAnimation){
219 //muecke = (ImageView) spielbereich.getChildAt(nummer);
220 //int vx = (Integer) muecke.getTag(R.id.vx);
221 //int vy = (Integer) muecke.getTag(R.id.vy);
222 //FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) muecke.getLayoutParams();
223 params.leftMargin += vx*(1+runde*0.1)*(1+schwierigkeitsgrad*0.25);
224 params.topMargin += vy*(1+runde*0.1)*(1+schwierigkeitsgrad*0.25);
225 } else{
226 //muecke = (ImageView) spielbereich.getChildAt(nummer);
227 //int vx = (Integer) muecke.getTag(R.id.vx);
228 //int vy = (Integer) muecke.getTag(R.id.vy);
229 //FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) muecke.getLayoutParams();
230 //params.leftMargin += vx*0;
231 //params.topMargin += vy*0;
232
233 }*/
234 params.leftMargin += bewegung*vx*(1+runde*0.1)*(1+schwierigkeitsgrad*0.25);
235 params.topMargin += bewegung*vy*(1+runde*0.1)*(1+schwierigkeitsgrad*0.25);
236 muecke.setLayoutParams(params);
237
238 nummer++;
239 }
240 }
241
242
243
244
245 private void mueckenVerschwinden() {
246 spielbereich = (FrameLayout) findViewById(R.id.spielbereich);
247
248 int nummer=0;
249 while(nummer<spielbereich.getChildCount()) {
250 ImageView muecke = (ImageView) spielbereich.getChildAt(nummer);
251 Date geburtsdatum = (Date) muecke.getTag(R.id.geburtsdatum);
252 long alter = (new Date()).getTime() - geburtsdatum.getTime();
253 if(alter > HOECHSTALTER_MS) {
254 Animation animationTod = AnimationUtils.loadAnimation(this, R.anim.tod);
255 muecke.startAnimation(animationTod);
256 spielbereich.removeView(muecke);
257 mp.pause();
258 } else {
259 nummer++;
260 }
261 }
262 }
263
264 @Override
265 public void run() {
266 zeitHerunterzaehlen();
267 }
268
269 @Override
270 public void onClick(View muecke) {
271 gefangeneMuecken++;
272 punkte += 100+schwierigkeitsgrad*50;
273 bildschirmAktualisieren();
274 tod.seekTo(0);
275 tod.start();
276 ((ImageView) muecke).setImageResource(R.drawable.blut);
277 blutAnimation = (AnimationDrawable) ((ImageView) muecke).getDrawable();
278 blutAnimation.start();
279 mp.pause();
280 muecke.setClickable(false);
281 }
282}

— geändert am 24.05.2013, 14:58:42

Antworten
impjor
  • Forum-Beiträge: 1.793

24.05.2013, 14:55:32 via App

Etwas allgemeines:
Bitte poste deinen Code zwischen
[code] und [/c ode]
Außerdem ist es hilfreich nur die Methode zu posten, in der dein Problem liegt.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Musab Kurt
  • Forum-Beiträge: 3

24.05.2013, 15:00:09 via Website

Ich habe es etwas gekürzt, aber die Methoden drin gelassen die mit dem Problem was zu tun haben könnten

Antworten