3

嗨 stackoverflow 社区,

我在 droid 4.0.3 设备上使用 Android API 14。

在 Activity 中,我设置了一个 Button 以在执行操作时在页面上显示 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 时,视图仍然永久消失。

有没有更好的方法让 TextView 在 OnClick 动作上出现和消失?

谢谢你的帮助!

4

4 回答 4

5

这些命令是背靠背执行的。所以从技术上讲,它可能是可见的,但只有一两毫秒。您需要区分何时使视图可见以及何时隐藏它......


您说您希望 TextView 在某种意义上“闪烁”,所以让我们使用作为每个 View 的一部分的 Handler 来调用 Runnable。这个 Runnable 稍后会简单地隐藏 TextView:

1)设置类变量:

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

2)稍后调用runnable:

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);
            }
        });
    }

活动主.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 回答