setFillAfter funktioniert bei mir nicht

  • Antworten:0
Yannick M
  • Forum-Beiträge: 46

26.08.2013, 04:52:25 via Website

Ich komme wieder mal nicht weiter. In meiner App bewegt kann man mit Buttons einen Delfin hoch und runter bewegen. Das klappt. Aber gleichzeitig soll er sich auch noch drehen. Wenn man auf den Button drückt zeigt es das drehen an, wenn man aber loslässt ist er wieder horizontal, obwohl das setFillAfter auf true ist. Habe gelesen, dass es nicht mehrere Verschiebungen gleichzeitig anzeigen kann. Man müsste es mit einem AnimationSet machen. Das habe ich dann auch gemacht, dann zeigt es mir die Rotate und Translate Animation an., aber der Delfin bewegt sich nicht mehr so wie er soll. Er macht dann plötzlich die translateAnimation in x-beliebige Richtung. Und die Rotation ist auch irgendwie zufällig.

Das ist das Skript wo die translateAnimation korrekt funktioniert (ohne AnimationSet):

1//Linker Button
2
3 mybuttonlinks.setOnTouchListener(new OnTouchListener(){
4
5 private Handler mHandler;
6
7 public boolean onTouch(View v, MotionEvent event){
8 switch(event.getAction()){
9 case MotionEvent.ACTION_DOWN:
10 if (mHandler != null) return true;
11 mHandler = new Handler();
12 mHandler.postDelayed(mAction, 10);
13 break;
14 case MotionEvent.ACTION_UP:
15 if (mHandler == null) return true;
16 mHandler.removeCallbacks(mAction);
17 mHandler = null;
18 break;
19 }
20 return false;
21 }
22
23
24 Runnable mAction = new Runnable() {
25 public void run() {
26 rotate = new RotateAnimation(jetzt, jetzt+drehung, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
27 rotate.setFillEnabled(true);
28 rotate.setFillAfter(true);
29 rotate.setDuration(10);
30 delphin.startAnimation(rotate);
31 jetzt = jetzt+drehung;;
32 mHandler.postDelayed(this, 10);
33 }
34 };
35
36
37
38 });
39
40
41
42 //Rechter Button
43
44 mybuttonrechts.setOnTouchListener(new OnTouchListener(){
45
46 private Handler mHandler;
47
48
49 public boolean onTouch(View v, MotionEvent event){
50 switch(event.getAction()){
51 case MotionEvent.ACTION_DOWN:
52 if (mHandler != null) return true;
53 mHandler = new Handler();
54 mHandler.postDelayed(mAction, 10);
55 break;
56 case MotionEvent.ACTION_UP:
57 if (mHandler == null) return true;
58 mHandler.removeCallbacks(mAction);
59 mHandler = null;
60 break;
61 }
62 return false;
63 }
64
65
66 Runnable mAction = new Runnable() {
67 public void run() {
68 rotate2 = new RotateAnimation(jetzt, jetzt-drehung, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
69 rotate2.setFillEnabled(true);
70 rotate2.setFillAfter(true);
71 rotate2.setDuration(10);
72 delphin.startAnimation(rotate2);
73 jetzt = jetzt-drehung;
74 mHandler.postDelayed(this, 10);
75 }
76 };
77
78
79
80 });
81
82
83 //Bewegung
84
85 final Handler h = new Handler();
86 h.postDelayed(new Runnable() {
87 public void run() {
88 bewegung=jetzt/8;
89 trans = new TranslateAnimation(0,0,transjetzt,transjetzt+bewegung);
90 trans.setFillEnabled(true);
91 trans.setFillAfter(true);
92 trans.setDuration(10);
93 delphin.startAnimation(trans);
94 transjetzt=transjetzt+bewegung;
95
96 h.postDelayed(this, 10);
97
98 }
99 }, 10);
100
101 final Handler f = new Handler();
102 f.postDelayed(new Runnable() {
103 public void run() {
104 if (jetzt>90) {
105
106 }
107 if (jetzt<-90) {
108
109 }
110
111
112 f.postDelayed(this, 10);
113
114 }
115 }, 10);
116
117
118
119 }

— geändert am 26.08.2013, 05:17:40

Antworten