gpt4 book ai didi

Android ViewPager - 如何将当前页面置于顶部?

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:02 26 4
gpt4 key购买 nike

我有一个带有负页边距的 ViewPager/FragmentPagerAdapter 组合,以便页面彼此稍微重叠。问题是,中心页面不在顶部。它左边的页面遮住了它。我希望中心页面始终显示在顶部。有没有一种优雅的方式来做到这一点?

最佳答案

页面的 z 顺序由它们的创建顺序决定,因此后面的页面将位于前面创建的页面之上(请参阅下面的第一张图片)。

在正常情况下,这应该不会有任何问题,因为页面是并排排列的,没有重叠区域,所以 z 顺序并不重要。但是,在多个可见页面具有负边距(重叠)的情况下,所选页面可能会被其旁边的页面部分遮挡。

克服这个问题的一种方法是在实例化期间保留页面的引用,并使用它通过 view.bringToFront() 更改它的 z 顺序。

view pager instantiation order select page blocked view reorder z

将其写入代码:

public class MyActivity extends Activity {

private ViewPager vp = null;
private SparseArray<View> viewCollection = new SparseArray<View>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
vp = (ViewPager)findViewById(R.id.viewpager);
vp.setPageMargin(-20);
vp.setOffscreenPageLimit(3);
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){
@Override
public void onPageSelected(int pos) {
View view = viewCollection.get(pos); // @@@ Get target page reference
view.bringToFront(); // @@@ change z-order to the top
}
});
vp.setAdapter(new MyAdapter());
}

public class MyAdapter extends PagerAdapter {

@Override
public Object instantiateItem(ViewGroup container, int position) {
View pageLayout = getLayoutInflater().inflate(R.layout.page_layout, container, false);
final Integer pageId = position;
TextView pageText = (TextView)pageLayout.findViewById(R.id.page_id);
pageText.setText(String.valueOf(position));
pageText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
vp.setCurrentItem(pageId); // @@@ select the clicked page
}
});
// paint gray shades onto the page background
pageLayout.setBackgroundColor(Color.argb(255, position*40, position*40, position*40));

viewCollection.put(position, pageLayout); // @@@ store the reference
container.addView(pageLayout);
return(pageLayout);
}

@Override
public int getCount() {
return 8; // any arbitrary number
}

@Override
public float getPageWidth(int position) {
return(0.33f);
}

@Override
public boolean isViewFromObject(View view, Object obj) {
return (view == obj);
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
viewCollection.remove(position); // @@@ remove the reference
}
}
}

关于Android ViewPager - 如何将当前页面置于顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com