7

レイアウトの位置を変更したいのですが、75ms後に最初の位置に戻して移動させたいのですが、それが私のコードです:

for(int i = 0; i < l1.getChildCount(); i++) {  
    linear = (LinearLayout) findViewById(l1.getChildAt(i).getId());  
    LayoutParams params = new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);  
    params.bottomMargin = 10;  
    linear.setLayoutParams(params);  
    SystemClock.sleep(75);
}   

問題は、アプリが 750 ミリ秒停止し、何もしないことです。invalidate()refreshDrawableState()、 、 、requestLayout()、 、postInvalidate()を呼び出してみました 。onResume()onRestart()onPause()

4

4 に答える 4

22

たぶんあなたが必要です:

linear.invalidate();
linear.requestLayout();

レイアウト変更後。

編集:

別のスレッドでコードを実行します。

new Thread() {
    @Override
    public void run() {
        <your code here>
    }
}.start();

そして、そのスレッドから UI を更新する必要があるときはいつでも、次を使用します。

activity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        <code to change UI>
    }
});
于 2013-08-27T16:47:13.367 に答える
2

数時間のテストの後、子の追加、可視性、回転などのビューで操作を行った場合にビューを更新する方法を見つけました。

以下のメソッドでビューを強制的に更新する必要があります。

linearSliderDots.post {
        // here linearSliderDots is a linear layout &
        // I made add & remove view option on runtime
        linearSliderDots.invalidate()
        linearSliderDots.requestLayout()
    }
于 2020-09-17T05:01:06.660 に答える
-1
ActivityName.this.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        <code to change UI>
    }
});
于 2018-08-31T07:20:45.343 に答える