Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android View设置为Visible并在同一OnClick方法中消失,View从不显示Visible_Android_View_Visible - Fatal编程技术网

Android View设置为Visible并在同一OnClick方法中消失,View从不显示Visible

Android View设置为Visible并在同一OnClick方法中消失,View从不显示Visible,android,view,visible,Android,View,Visible,大家好,我的社区 我在Droid4.0.3设备上使用Android API 14 在活动中,我设置了一个按钮,在页面执行操作时在页面上显示文本视图。执行操作后,我希望TextView再次消失 button1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // make textview visible textView1.setV

大家好,我的社区

我在Droid4.0.3设备上使用Android API 14

在活动中,我设置了一个按钮,在页面执行操作时在页面上显示文本视图。执行操作后,我希望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在某种意义上“闪烁”,所以让我们使用每个视图的一部分处理程序来调用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);
    }
});
(处理程序和Runnable不会阻止UI线程。)

使用动画

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


您应该使用处理程序来运行将可见性设置为“消失”的代码位。也许会有帮助。

这里是处理程序的示例(我还没有编译它!)


我想这些台词可能演奏得太快了。有没有办法让它慢下来?当一切都正确设置时,操作将需要更长的时间来执行,但现在我只关注UI,我想让它慢下来…你想让它闪烁吗?或者你想要什么类型的延迟?眨眼就可以了——我只需要确保用户有某种方式知道他们的点击被听到了!:)为什么不使用咔哒声而不是视觉闪烁?人们更善于回忆快速的声音,而不是快速的图像。正如你所说,添加等待(1000)对于演示目的来说是理想的,但它会阻止UI线程并结束活动…我不熟悉动画。我会用这个代替文本视图吗?动画可以动画化你的控件。可以平移、旋转、调整大小和更改控件的alpha。它要平滑得多。试试我上面的例子。:)我认为这和山姆的答案是一样的——而且很好!我会投票支持它,但我还没有足够的声誉。谢谢你!我会投赞成票。但是创建一个新的处理程序不是必需的,每个视图都已经有了一个处理程序,可以直接访问
post()
postDelayed()
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);
    }
});