如何让ImageButton仅显示在ViewPager的最后一页?
核心思路
通过控制按钮的可见性,初始时隐藏按钮,当ViewPager切换到最后一页时显示,其他页面则隐藏。
具体修改步骤
1. 初始隐藏按钮
方案一(XML中设置):
在activity_welcome2.xml的ImageButton标签中添加android:visibility="gone",让按钮默认隐藏:
<ImageButton android:id="@+id/next3" android:layout_width="99dp" android:layout_height="45dp" android:background="@android:color/transparent" android:scaleType="fitCenter" android:visibility="gone" <!-- 添加这行 --> app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.822" app:srcCompat="@drawable/next" />
方案二(Java代码中设置):
如果不想修改XML,也可以在Welcome_Activity.java的onCreate方法中,初始化按钮后添加隐藏代码:
// transition button to Signup page nextBtn = (ImageButton) findViewById(R.id.next3); nextBtn.setVisibility(View.GONE); // 添加这行隐藏按钮 nextBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Welcome_Activity.this,MainActivity.class); startActivity(intent); } });
2. 监听ViewPager页面切换,控制按钮可见性
修改Welcome_Activity.java中ViewPager.OnPageChangeListener的onPageSelected方法,添加按钮显示/隐藏的逻辑:
mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { createDots(position); // 判断是否是最后一页,控制按钮显示 if (position == layouts.length - 1) { nextBtn.setVisibility(View.VISIBLE); } else { nextBtn.setVisibility(View.GONE); } } @Override public void onPageScrollStateChanged(int state) {} });
完整修改后的Welcome_Activity.java代码片段
package com.group7.salitongue; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.viewpager.widget.ViewPager; public class Welcome_Activity extends AppCompatActivity { private ViewPager mPager; private int[] layouts = { R.layout.activity_main, R.layout.activity_splashscreen2, R.layout.activity_welcome }; private MpagerAdapter mpagerAdapter; private LinearLayout Dots_Layout; private ImageView[] dots; private ImageButton nextBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome2); mPager = (ViewPager) findViewById(R.id.viewPager); mpagerAdapter = new MpagerAdapter(layouts, this); mPager.setAdapter(mpagerAdapter); Dots_Layout = (LinearLayout) findViewById(R.id.dotsLayout); createDots(0); mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { createDots(position); // 控制按钮显示/隐藏 if (position == layouts.length - 1) { nextBtn.setVisibility(View.VISIBLE); } else { nextBtn.setVisibility(View.GONE); } } @Override public void onPageScrollStateChanged(int state) {} }); // transition button to Signup page nextBtn = (ImageButton) findViewById(R.id.next3); nextBtn.setVisibility(View.GONE); // 初始隐藏按钮 nextBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Welcome_Activity.this,MainActivity.class); startActivity(intent); } }); } private void createDots(int current_position) { if(Dots_Layout != null) Dots_Layout.removeAllViews(); dots = new ImageView[layouts.length]; for (int i = 0; i < layouts.length; i++) { dots[i] = new ImageView(this); if (i == current_position) { dots[i].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.active_dots)); } else { dots[i].setImageDrawable(ContextCompat.getDrawable(this, R.drawable.default_dots)); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ); params.setMargins(4, 0, 4, 0); Dots_Layout.addView(dots[i],params); } } }
内容的提问来源于stack exchange,提问作者reese
相关产品推荐
相关产品推荐

