0

runSec方法を組み合わせて、1 つの方法でrunMin手を動かしたいと考えています。これらのメソッドは、文字盤の分針と秒針を動かします。

public void settTime(int seconds) {
  if(isTimer)
   return;
    tTime = seconds;
     int minutes = seconds / 60;
     int hours = minutes / 60;
     minutes = minutes % 60;
     seconds = seconds % 60;    
     tTimeLabel.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
      runSec(seconds);
      runMin(minutes);
}

public void runSec(int seconds) {
 RotateAnimation rotateAnimation = new RotateAnimation(seconds * 6, seconds * 6,
 Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
 rotateAnimation.setFillAfter(true);
 csecond.startAnimation(rotateAnimation);
}

public void runMin(int minutes) {
 RotateAnimation rotateAnimation = new RotateAnimation(minutes * 6, minutes * 6,
 Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
 rotateAnimation.setFillAfter(true);
cminute.startAnimation(rotateAnimation);
}
4

7 に答える 7

2

あなたの方法はすでにほぼ同じです。csecondまたは必要に応じて値を取る別の引数を渡すだけcminuteです。

public void runHand(int amount, Hand hand) {
  RotateAnimation rotateAnimation = new RotateAnimation(amount * 6, amount * 6,
  Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
  rotateAnimation.setFillAfter(true);
  hand.startAnimation(rotateAnimation);
}
于 2012-12-05T10:53:35.413 に答える
1
public void runMin(int minutes) {
   cminute.startAnimation(createAnimation(minutes*6));
}

public void runSec(int seconds) {
  csecond.startAnimation(createAnimation(seconds*6));
}

public RotateAnimation createAnimation(int time) {
   RotateAnimation rotateAnimation = new RotateAnimation(time, time,
   Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
   rotateAnimation.setFillAfter(true);
   return rotateAnimation;
}
于 2012-12-05T10:53:51.357 に答える
0
public void runTime(int seconds, int minutes) 
{
 RotateAnimation rotateAnimation = new RotateAnimation(seconds * 6, seconds * 6,
 Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
 RotateAnimation rotateAnimation = new RotateAnimation(minutes * 6, minutes * 6,
 Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
 rotateAnimation.setFillAfter(true);
 csecond.startAnimation(rotateAnimation);
 cminute.startAnimation(rotateAnimation);
}
于 2012-12-05T10:55:37.067 に答える
0

基本的に、両方の方法で同じことを行うので、いずれかで置き換えることができます-

public void runMinorSec(int time) {
 RotateAnimation rotateAnimation = new RotateAnimation(time * 6, minutes * 6,
 Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
 rotateAnimation.setFillAfter(true);
 cminute.startAnimation(rotateAnimation);
}

そして、次のようなメソッドを呼び出すことができます

  runMinorSec(seconds);
  runMinorSec(minutes);

しかし、このように2つのメソッドを連結することができます -

public void runSecOrMin(int time, boolean isSec) {
 if(isSec){
    RotateAnimation rotateAnimation = new RotateAnimation(seconds * 6, seconds * 6,
    Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnimation.setFillAfter(true);
    csecond.startAnimation(rotateAnimation);
 }else{
    RotateAnimation rotateAnimation = new RotateAnimation(minutes * 6, minutes * 6,
    Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnimation.setFillAfter(true);
    cminute.startAnimation(rotateAnimation); 
 }
}

..

runSecOrMin(seconds,true);
runSecOrMin(minutes,false);
于 2012-12-05T10:52:52.823 に答える
0

メソッドは同じように見え、その理由は簡単に推測できます。時計の秒針と分針はどちらも、1 単位 (1/60 回転) ごとに同じアニメーションを持っています。したがって、最終的には構文に帰着します。必要に応じて、変数名minutesOrSecondsを別のものに置き換えます。

public enum TimeType {SECOND, MINUTE}

public void runMin(int time, TimeType timeType) {
    RotateAnimation rotateAnimation = new RotateAnimation(time* 6, time* 6,
    Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnimation.setFillAfter(true);
    if (TimeType == SECOND) {
        csecond.startAnimation(rotateAnimation);
    } else if (TimeType == MINUTE) {
        cminute.startAnimation(rotateAnimation);
    }
}
于 2012-12-05T10:53:28.610 に答える
0

これを試してみてください。ビューをパラメーター、csecond、および cminute として渡すだけです。

public void runMin(int time, View target) {
    RotateAnimation rotateAnimation = new RotateAnimation(time * 6, time * 6,
    Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnimation.setFillAfter(true);
    target.startAnimation(rotateAnimation);
}

それが役立つことを願っています。

于 2012-12-05T10:54:18.470 に答える
0

私はあなたの2つの方法を調べましたが、引数の名前以外の違いは見つかりませんでした. 私が正しければ、このメソッドrun(int time)を呼び出して、使用するすべての場所を時間ごとに置き換えてminutesくださいseconds。時間は分単位または秒単位のいずれかである可能性があることをjavadocで言及してください。

于 2012-12-05T10:54:32.123 に答える