3

スタックオーバーフロー コミュニティの皆様、こんにちは。

ドロイド 4.0.3 デバイスで Android API 14 を使用しています。

アクティビティでは、アクションの実行中にページに TextView を表示するようにボタンを設定しました。アクションが実行された後、TextView を再び非表示にします。

button1.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // make textview visible 
        textView1.setVisibility(View.VISIBLE);      

        // perform action
        System.out.println("perform action");

        // make textview disappear
        textView1.setVisibility(View.GONE);
    }
});

TextView を非表示にする部分を削除すると、期待どおり TextView がウィンドウの上部に表示されますが、TextView が 1 ~ 2 秒間表示されてから消えるようにしたいと考えています。

最初は、小さなアクションを実行するだけでなく、さらに多くの作業を行う必要があるのではないかと考えたので、待機を追加してテキストを出力しようとしましたが、どれもうまくいきませんでした. 待機は常に例外を呼び出し、アクティビティを終了し、1 から 1000 の数字を印刷したとき、ビューはまだ永久に消えていました。

OnClick アクションで TextView を表示および非表示にするより良い方法はありますか?

ご協力いただきありがとうございます!

4

4 に答える 4

5

これらのコマンドは連続して実行されます。したがって、技術的な意味では、1 ミリ秒か 2 ミリ秒しか見えないかもしれません。ビューを表示するタイミングと非表示にするタイミングを区別する必要があります...


TextView をある意味で「点滅」させたいとおっしゃっていたので、すべての View の一部である Handler を使用して Runnable を呼び出しましょう。この Runnable は、数分後に TextView を単純に非表示にします。

1) クラス変数を設定します。

Runnable hide = new Runnable() {
    @Override
    public void run() {
        textView1.setVisibility(View.GONE);
    }
};

2) しばらくしてランナブルを呼び出します。

button1.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // make textview visible for 1 second (1000 milliseconds)
        textView1.setVisibility(View.VISIBLE);      
        textView1.postDelayed(hide, 1000);
    }
});

(Handler と Runnable は UI スレッドをブロックしません。)

于 2012-10-26T16:19:24.073 に答える
2

これはハンドラーの例です(私はコンパイルしていません!)

Handler handler = new Handler();

button1.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // make textview visible 
        textView1.setVisibility(View.VISIBLE);      

        // perform action
        System.out.println("perform action");

        // make textview disappear
        handler.postDelayed(new Runnable() {
          @Override
          public void run() {
              textView1.setVisibility(View.GONE);
         }} , 2000);
    }
});
于 2012-10-26T16:31:22.703 に答える
1

アニメーションを使用する

public class MainActivity extends Activity {
     TextView txt;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button b = (Button) findViewById(R.id.btn_animation);

        txt = (TextView) findViewById(R.id.textviewtest);

        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                txt.clearAnimation();

                Animation fadeIn = new AlphaAnimation(0, 1);
                fadeIn.setInterpolator(new DecelerateInterpolator()); //add this
                fadeIn.setDuration(1000);

                Animation fadeOut = new AlphaAnimation(1, 0);
                fadeOut.setInterpolator(new AccelerateInterpolator()); //and this
                fadeOut.setStartOffset(1000);
                fadeOut.setDuration(1000);

                AnimationSet animation = new AnimationSet(false); //change to false
                animation.addAnimation(fadeIn);
                animation.addAnimation(fadeOut);

                animation.setAnimationListener( new AnimationListener() {

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        // TODO Auto-generated method stub
                        txt.setVisibility(View.GONE);
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onAnimationStart(Animation animation) {
                        // TODO Auto-generated method stub
                        txt.setVisibility(View.VISIBLE);
                    }

                });
                txt.setAnimation(animation);
            }
        });
    }

activity_main.xml:

<LinearLayout 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" >


<Button
    android:id="@+id/btn_animation"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Animation" />


<TextView
    android:id="@+id/textviewtest"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:text="HelloWorld" />

于 2012-10-26T16:20:42.247 に答える
0

Visibility を GONE に設定するコードを実行するには、ハンドラーを使用する必要があります。おそらく、postDelayed を使用して特定の時間にタスクを実行すると役立つ場合があります。

于 2012-10-26T16:22:06.777 に答える