Android 如何使ViewPager的第一个视图始终保持不变
我上了ViewPager的课。当我单击第一个视图上的按钮时,第二个视图被翻转,并且它上的按钮移动到屏幕的中间。但当我返回到第一个视图时,按钮也被移动了。但我需要的是,第一个视图始终保持不变。我该怎么做 我的客户页面雷达:Android 如何使ViewPager的第一个视图始终保持不变,android,android-viewpager,Android,Android Viewpager,我上了ViewPager的课。当我单击第一个视图上的按钮时,第二个视图被翻转,并且它上的按钮移动到屏幕的中间。但当我返回到第一个视图时,按钮也被移动了。但我需要的是,第一个视图始终保持不变。我该怎么做 我的客户页面雷达: public class CustomPagerAdapter extends PagerAdapter { private Context context; private ImageButton imageButton; public Custom
public class CustomPagerAdapter extends PagerAdapter {
private Context context;
private ImageButton imageButton;
public CustomPagerAdapter(Context context) {
super();
this.context = context;
}
@NotNull
@Override
public Object instantiateItem(@NotNull ViewGroup container, int position) {
final TimeView timeView = new TimeView(context);
View view = null;
switch (position) {
case 0:
view = timeView;
break;
case 1:
view = SecondCustomView.getView(context, container);
break;
}
container.addView(view);
return view;
}
@Override
public int getCount() {
return 2;
}
@Override
public boolean isViewFromObject(@NotNull View view, @NotNull Object object) {
return view == object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
活动类别:
public class Activity extends AppCompatActivity {
private ViewPager viewPager;
private CustomPagerAdapter customPagerAdapter;
private ImageButton imageButton;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
customPagerAdapter = new CustomPagerAdapter(this);
viewPager = findViewById(R.id.viewPager);
viewPager.setAdapter(customPagerAdapter);
imageButton = findViewById(R.id.nextButton);
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
int middleScreen = point.x/2;
final TranslateAnimation animation = new TranslateAnimation(0, -middleScreen, 0, 0);
animation.setDuration(3000);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
imageButton.setAnimation(animation);
}
});
}
}
UPD:我发现,当我点击和翻转按钮时,我该如何做动画。我必须使用
addOnPageChangeListener
方法:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
int middleScreen = point.x / 2;
final TranslateAnimation animation = new TranslateAnimation(0, -middleScreen, 0, 0);
animation.setDuration(3000);
animation.setFillAfter(true);
if (position == 1) {
imageButton.setAnimation(animation);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
但我仍然不知道如何在第一次查看时使按钮位置保持不变…UPD:我发现,如何才能在单击和翻转时制作按钮动画。我必须使用
addOnPageChangeListener
方法:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
int middleScreen = point.x / 2;
final TranslateAnimation animation = new TranslateAnimation(0, -middleScreen, 0, 0);
animation.setDuration(3000);
animation.setFillAfter(true);
if (position == 1) {
imageButton.setAnimation(animation);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
但是我仍然不知道如何在第一次查看时确定按钮位置没有改变…我发现在第一次查看时按钮位置没有改变的决定是什么:
@Override
public void onPageSelected(int position) {
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
int middleScreen = point.x / 2;
final TranslateAnimation animation = new TranslateAnimation(0, -middleScreen, 0, 0);
animation.setDuration(3000);
animation.setFillAfter(true);
if (position == 1) {
imageButton.setAnimation(animation);
}else {
imageButton.getAnimation().cancel();
}
}
在第一次查看时,我发现按钮位置没有改变:
@Override
public void onPageSelected(int position) {
Display display = getWindowManager().getDefaultDisplay();
Point point = new Point();
display.getSize(point);
int middleScreen = point.x / 2;
final TranslateAnimation animation = new TranslateAnimation(0, -middleScreen, 0, 0);
animation.setDuration(3000);
animation.setFillAfter(true);
if (position == 1) {
imageButton.setAnimation(animation);
}else {
imageButton.getAnimation().cancel();
}
}