You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发咨询:10秒消失图片及按钮触发全屏播放跳转实现

Alright, let's tackle your two Android dev questions with straightforward, working code snippets that you can drop right into your project:

问题1:如何在Android中显示一张10秒后自动消失的图片?

The simplest way to pull this off is using a Handler to post a delayed action that hides your ImageView. I'll include memory leak-safe implementations for both Java and Kotlin:

Step-by-Step Setup:

  1. Add an ImageView to your layout (e.g., activity_main.xml):
<ImageView
    android:id="@+id/autoHideImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_target_image" <!-- Replace with your image resource -->
    android:visibility="visible" />
  1. Implement the delayed hide logic in your Activity/Fragment:

Java Code:

public class MainActivity extends AppCompatActivity {
    private ImageView autoHideImage;
    // Use static inner class + WeakReference to avoid memory leaks
    private static class SafeHandler extends Handler {
        private final WeakReference<MainActivity> activityRef;

        SafeHandler(MainActivity activity) {
            activityRef = new WeakReference<>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            MainActivity activity = activityRef.get();
            if (activity != null && !activity.isFinishing()) {
                activity.autoHideImage.setVisibility(View.GONE);
            }
        }
    }

    private final SafeHandler handler = new SafeHandler(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        autoHideImage = findViewById(R.id.autoHideImage);

        // Schedule hide action after 10000ms (10 seconds)
        handler.sendEmptyMessageDelayed(0, 10000);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Clear pending callbacks to prevent leaks
        handler.removeCallbacksAndMessages(null);
    }
}

Kotlin Code:

class MainActivity : AppCompatActivity() {
    private lateinit var autoHideImage: ImageView
    private val handler = Handler(Looper.getMainLooper())

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        autoHideImage = findViewById(R.id.autoHideImage)

        // Hide image after 10 seconds
        handler.postDelayed({
            autoHideImage.visibility = View.GONE
        }, 10000)
    }

    override fun onDestroy() {
        super.onDestroy()
        handler.removeCallbacksAndMessages(null)
    }
}

Pro Tip: Use View.INVISIBLE instead of View.GONE if you want to keep the image's space in the layout but hide its content.


问题2:点击Button1后全屏显示图片、播放音频,10秒后跳转页面

This requires combining three core tasks: enabling fullscreen mode, playing audio, and delayed navigation. Here's a complete implementation:

Step-by-Step Setup:

  1. Add a Button and fullscreen ImageView to your layout:
<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Trigger Action" />

<ImageView
    android:id="@+id/fullscreenImage"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/your_fullscreen_image"
    android:visibility="gone" <!-- Hidden by default -->
    android:scaleType="centerCrop" />
  1. Implement the full logic in your Activity:

Java Code:

public class MainActivity extends AppCompatActivity {
    private Button button1;
    private ImageView fullscreenImage;
    private MediaPlayer mediaPlayer;
    private Handler handler;

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

        button1 = findViewById(R.id.button1);
        fullscreenImage = findViewById(R.id.fullscreenImage);
        handler = new Handler();

        button1.setOnClickListener(v -> {
            // 1. Switch to fullscreen mode
            enableFullscreen();

            // 2. Show the fullscreen image
            fullscreenImage.setVisibility(View.VISIBLE);

            // 3. Play the congrats audio
            playCongratsAudio();

            // 4. Navigate to SecondGame after 10 seconds
            handler.postDelayed(() -> {
                Intent intent = new Intent(MainActivity.this, SecondGame.class);
                startActivity(intent);
                // Optional: Finish current activity to prevent going back
                finish();
            }, 10000);
        });
    }

    private void enableFullscreen() {
        // Hide system bars and make window occupy full screen
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        );
        getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN
        );
    }

    private void playCongratsAudio() {
        // Clean up previous media player instance
        if (mediaPlayer != null) {
            mediaPlayer.release();
        }
        // Initialize media player with your audio file (place congrats.mp3 in res/raw)
        mediaPlayer = MediaPlayer.create(this, R.raw.congrats);
        // Release resources after playback finishes
        mediaPlayer.setOnCompletionListener(mp -> mp.release());
        mediaPlayer.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // Clean up resources to avoid leaks
        if (mediaPlayer != null) {
            mediaPlayer.release();
            mediaPlayer = null;
        }
        handler.removeCallbacksAndMessages(null);
    }
}

Kotlin Code:

class MainActivity : AppCompatActivity() {
    private lateinit var button1: Button
    private lateinit var fullscreenImage: ImageView
    private var mediaPlayer: MediaPlayer? = null
    private val handler = Handler(Looper.getMainLooper())

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button1 = findViewById(R.id.button1)
        fullscreenImage = findViewById(R.id.fullscreenImage)

        button1.setOnClickListener {
            // 1. Enable fullscreen mode
            enableFullscreen()

            // 2. Show the fullscreen image
            fullscreenImage.visibility = View.VISIBLE

            // 3. Play audio
            playCongratsAudio()

            // 4. Navigate after 10 seconds
            handler.postDelayed({
                val intent = Intent(this, SecondGame::class.java)
                startActivity(intent)
                finish() // Optional: Block back navigation to this activity
            }, 10000)
        }
    }

    private fun enableFullscreen() {
        window.decorView.systemUiVisibility = (
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        or View.SYSTEM_UI_FLAG_FULLSCREEN
                        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                )
        window.setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
    }

    private fun playCongratsAudio() {
        mediaPlayer?.release()
        mediaPlayer = MediaPlayer.create(this, R.raw.congrats)
        mediaPlayer?.setOnCompletionListener { it.release() }
        mediaPlayer?.start()
    }

    override fun onDestroy() {
        super.onDestroy()
        mediaPlayer?.release()
        mediaPlayer = null
        handler.removeCallbacksAndMessages(null)
    }
}

Key Notes:

  • Ensure congrats.mp3 is placed in the res/raw directory (create the folder if it doesn't exist).
  • The IMMERSIVE_STICKY flag keeps system bars hidden even if the user swipes up/down; adjust flags if you need different behavior.
  • Always release MediaPlayer resources to avoid memory leaks and audio playback issues.

内容的提问来源于stack exchange,提问作者francydarkcool -

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:01:43