0

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>

ヘルプや提案をいただければ幸いです。

4

1 に答える 1