2

そろばんのような時計を作っています。私の問題は、右に進むのではなく、毎秒ごとに画像がリセットされる理由を理解できないことです。私の考えは、おそらく別のタイプのアニメーションを使用する必要があるということですか? これまでの私のコードは次のとおりです。

public class MainActivity extends Activity implements AnimationListener {
Button start, stop;

TextView time;

LinearLayout layout;

Animation movement;

private Handler mHandler = new Handler();
private long startTime;
private long elapsedTime;
private final int REFRESH_RATE = 1000;
private String seconds;
private long secs;
private boolean stopped = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    start = (Button) findViewById(R.id.buttonStart);

    start.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // Start animation on each image

            if(stopped){
                startTime = System.currentTimeMillis() - elapsedTime;
            }
            else{
                startTime = System.currentTimeMillis();
            }
            mHandler.removeCallbacks(startTimer);
            mHandler.postDelayed(startTimer, 0);

        }

    });

    stop = (Button) findViewById(R.id.buttonStop);

    stop.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            mHandler.removeCallbacks(startTimer);
            stopped = true;

        }

    });

    time = (TextView) findViewById(R.id.textTime);

    // Get the layouts
    layout = (LinearLayout) findViewById(R.id.linearLayout1);

    // Create animation for right image
    movement = AnimationUtils.loadAnimation(this, R.layout.animation_test);
    movement.setAnimationListener(this);   

    }

// Listen for animations to be finished
// There are more efficient ways, I'm just being lazy.
public void onAnimationEnd(Animation animation) {
    // or do whatever it is you wanted to do here, like launch another activity?
} 

public void onAnimationRepeat(Animation animation) {    
} 

public void onAnimationStart(Animation animation) { 
} 

private Runnable startTimer = new Runnable() {
       public void run() {
           elapsedTime = System.currentTimeMillis() - startTime;
           update(elapsedTime);
           mHandler.postDelayed(this,REFRESH_RATE);
        }
    };

private void update (float time){
    secs = (long)(time/1000);

    layout.startAnimation(movement);

    secs = secs % 60;
    seconds=String.valueOf(secs);
    if(secs == 0){
        seconds = "00";
    }
    if(secs <10 && secs > 0){
        seconds = "0"+seconds;
    }

    /* Setting the timer text to the elapsed time */
    ((TextView)findViewById(R.id.textTime)).setText(seconds);
}
}

私の animation.xml は次のとおりです

<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromXDelta="0" 
 android:toXDelta="15%p" 
 android:fromYDelta="0"
 android:toYDelta="0%" 
 android:duration="500"
 android:zAdjustment="top"/>

私は立ち往生しており、開発セクションを読み通そうとしていますが、正しい解決策が見つからないか、何かを見落としているに違いありません。

4

2 に答える 2

1

追加してみてください:

android:fillEnabled="true"
android:fillAfter="true"

あなたのアニメーションに。

于 2012-11-15T16:18:17.660 に答える
-1

Android 3.0 以降をターゲットにしている場合は、代わりに新しいアニメーション フレームワークを使用できます: http://developer.android.com/guide/topics/graphics/prop-animation.html

于 2012-11-15T16:37:26.337 に答える