1

Android アプリに TextView があります。その TextView を毎秒ピクセルごとに移動したい。textView を移動するために setX メソッドを使用しています。ボタンを使用してクリックすると正常に動作します。クリックするたびにテキストビューが移動しますが、ハンドラーを使用してループを使用して自動化しようとすると、スムーズに移動せず、遅延なく画面の左側に急いで移動します。これは私が使用しているコードです

    int i = (int) txtView.getX();    
    while (i>0)
    {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable()
        {
             @Override
            public void run()
            {
               txtView.setX((int) txtView.getX() - 1);
            }
        }, 1000)
    i--;
  }
4

5 に答える 5

2

取引なしで posDelayed アクションを設定しているためです。runnable の実行前に遅延を設定しています。ただし、while ループの 2 つの反復の間に遅延はありません

おそらくあなたはこのようなことをすることができます

      handler.postDelayed(r, 1000);

      Runnable r = new Runnable()
        {
             @Override
            public void run()
            {
               txtView.setX((int) txtView.getX() - 1);

               i--;
               if(i>0)
                    handler.postDelayed(r,1000);
            }
        }
于 2013-06-03T11:22:15.273 に答える
0

このクラスを使用

 public class TypeWriter extends TextView {

    private CharSequence mText;
    private int mIndex;
    private long mDelay = 500; //Default 500ms delay

    public TypeWriter(Context context) {
        super(context);
    }

    public TypeWriter(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private Handler mHandler = new Handler();
    private Runnable characterAdder = new Runnable() {
        @Override
        public void run() {
            batterLevel.setText(mText.subSequence(0, mIndex++));
            if(mIndex <= mText.length()) {
                mHandler.postDelayed(characterAdder, mDelay);
            }
        }
    };

    public void animateText(CharSequence text) {
        mText = text;
        mIndex = 0;

        batterLevel.setText("");
        mHandler.removeCallbacks(characterAdder);
        mHandler.postDelayed(characterAdder, mDelay);
    }


    public void setCharacterDelay(long millis) {
        mDelay = millis;
    }
}

以下のようにアクティビティ呼び出しから使用するには

 private TypeWriter writer;


 writer = new TypeWriter(getActivity());
 writer.setCharacterDelay(150);
 writer.animateText(todisplay);
于 2013-06-03T11:31:57.593 に答える
0
int i = (int) txtView.getX();    
while (i>0)
{
    txtView.setX((int) txtView.getX() - 1);
    Thread.sleep(1000);
    i--;
}
于 2013-06-03T11:25:51.477 に答える