如何使ImageView覆盖另一个视图并在一段时间后隐藏它?

时间:2013-09-03 12:46:50

标签: java android android-layout imageview delay

我正在创建一个非常简单的Andriod应用程序,我想知道我是否可以通过我的应用程序获得一些帮助。

我想在整个ListView(包括操作栏)上显示一个ImageView 3秒钟,然后删除ImageView(或隐藏它,任何东西),返回列表视图。

如何做到这一点?我尝试过一些东西,但要么破坏了我的代码,要么根本没有显示任何东西。

先谢谢大家 - 如果您需要进一步解释,请与我们联系。

编辑:根据下面的问题,我想在显示ListView后立即显示ImageView,持续3秒,然后消失。

1 个答案:

答案 0 :(得分:3)

奥莱特。你想要的实际上很容易。

只需创建一个包含ListView和它上面的ImageView的RelativeLayout。 然后在onCreate(...)方法中,使用处理程序并在3秒后将ImageView的可见性设置为 GONE

这是layout.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:scaleType="fitXY"
        android:src="@drawable/your_image" />

</RelativeLayout>

在onCreate(...)方法中

@Override    
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourlayout);

    final ImageView iv = (ImageView) findViewById(R.id.imageView1);

    Handler h = new Handler();
    h.postDelayed(new Runnable() {

        @Override
        public void run() {
            // EITHER HIDE IT IMMEDIATELY
            iv.setVisibility(View.GONE);

            // OR HIDE IT USING ANIMATION
            hideImageAnimated(iv);

            // DONT use both lines at the same time :)
        }
    }, 3000); // 3 seconds
}  

为了让事情有点更顺畅,您可以在ImageView上使用 AlphaAnimation

public void hideImageAnimated(final ImageView iv) {

    Animation alpha = new AlphaAnimation(1.0f, 0.0f);
    alpha.setDuration(1000); // whatever duration you want

    // add AnimationListener
    alpha.setAnimationListener(new AnimationListener(){

        @Override
        public void onAnimationEnd(Animation arg0) {
            iv.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationRepeat(Animation arg0) { }

        @Override
        public void onAnimationStart(Animation arg0) { }

    });

    iv.startAnimation(alpha);
}