XMLレイアウトで定義されたボタンがあります。クリックすると、ImageView man 100ピクセルを右に変換するはずの関数が呼び出され、画像が右に移動しますが、ボタンを2回クリックするとリセットされます画像を開始位置に戻し、同じパスで同じアニメーションを繰り返します。(xml に android:fillAfter="true" があります) onAnimationEnd 内に次の行を追加しようとしました -
@Override
public void onAnimationEnd(Animation arg0) {
man.layout(xCurrentPos + 100, yCurrentPos, xCurrentPos+ (man.getWidth()) + 100, yCurrentPos + man.getHeight());
}
ただし、アニメーションが終了すると、ImageView がアニメーションを停止した場所の左側で ImageView が少しグリッチします (少し後方にホップします) xCurrentPos + 100 パラメーターの例で試してみました。うまくいきました、私も入れてみました
man.layout(man.getLeft(), man.getTop(), man.getRight(), man.getBottom());
ただし、onAnimationEnd では、画像を元の位置にリセットするだけです
ここに私のコードがあります、
package com.junglejackapps.theman;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
Button bup, bdown, bleft, bright;
int xCurrentPos;
int yCurrentPos;
ImageView man;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bup = (Button) findViewById(R.layout.activity_main);
bdown = (Button) findViewById(R.layout.activity_main);
bleft = (Button) findViewById(R.layout.activity_main);
bright = (Button) findViewById(R.layout.activity_main);
man = (ImageView) findViewById(R.id.man);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClick_function_up (View v) {
}
public void onClick_function_right (View v) {
xCurrentPos = man.getLeft();
yCurrentPos = man.getTop();
Animation anim= new TranslateAnimation(xCurrentPos, xCurrentPos+100, yCurrentPos, yCurrentPos);
anim.setDuration(2500);
anim.setFillAfter(true);
anim.setFillEnabled(true);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {}
@Override
public void onAnimationRepeat(Animation arg0) {}
@Override
public void onAnimationEnd(Animation arg0) {
man.layout(xCurrentPos + 100, yCurrentPos, xCurrentPos+ (man.getWidth()) + 100, yCurrentPos + man.getHeight());
}
});
man.startAnimation(anim);
}
public void onClick_function_down (View v) {
}
public void onClick_function_left (View v) {
}
}
そして私のXMLファイル
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:fillAfter="true">
<ImageView
android:id="@+id/man"
android:layout_width="70dp"
android:layout_height="120dp"
android:layout_marginLeft="22dp"
android:contentDescription="@string/arrow"
android:src="@drawable/man"
/>
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_marginBottom="20dp"
android:text=""
android:onClick="onClick_function_up" />
<Button
android:id="@+id/button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="19dp"
android:text=""
android:onClick="onClick_function_up_down"/>
<Button
android:id="@+id/button3"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/button2"
android:layout_marginRight="33dp"
android:text=""
android:onClick="onClick_function_right"
/>
<Button
android:id="@+id/button4"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/button2"
android:layout_marginLeft="15dp"
android:text=""
android:onClick="onClick_function_left" />
</RelativeLayout>
ヘルプや提案をいただければ幸いです。