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:
- Add an
ImageViewto 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" />
- 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.
This requires combining three core tasks: enabling fullscreen mode, playing audio, and delayed navigation. Here's a complete implementation:
Step-by-Step Setup:
- 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" />
- 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.mp3is placed in theres/rawdirectory (create the folder if it doesn't exist). - The
IMMERSIVE_STICKYflag keeps system bars hidden even if the user swipes up/down; adjust flags if you need different behavior. - Always release
MediaPlayerresources to avoid memory leaks and audio playback issues.
内容的提问来源于stack exchange,提问作者francydarkcool -
相关产品推荐
相关产品推荐

