我希望显示一周中所有日期的VIEwPager,并预览当前项目的以下项目.
我已经尝试了很多从stackoverflow建议的解决方案,但它们都没有工作.我不会在VIEwPager中使用片段,因此我使用了PagerAdapter.
看这个图片:
我的出发点是:
> activity_main.xml
<TextVIEw androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:gravity="center_horizontal" androID:text="Choose a day of the week:" /><androID.support.v4.vIEw.VIEwPager androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:ID="@+ID/weekOfTheDayPager"/>
> MainActivity.java
public class MainActivity extends AppCompatActivity {@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); setUpAdapter();}private voID setUpAdapter() { VIEwPager _mVIEwPager = (VIEwPager) findVIEwByID(R.ID.weekOfTheDayPager); final String[] daysOfTheWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "FrIDay", "Saturday"}; final Context myContext = getBaseContext(); _mVIEwPager.setAdapter(new PagerAdapter() { @OverrIDe public int getCount() { return daysOfTheWeek.length; } @OverrIDe public boolean isVIEwFromObject(VIEw vIEw, Object object) { return vIEw == object; } @OverrIDe public Object instantiateItem(VIEwGroup collection, int position) { LayoutInflater inflater = LayoutInflater.from(myContext); VIEwGroup layout = (VIEwGroup) inflater.inflate(R.layout.dayoftheweeklayout, collection, false); ((TextVIEw) layout.findVIEwByID(R.ID.dayOfTheWeekTextVIEw)).setText(daysOfTheWeek[position]); collection.addVIEw(layout); return layout; } @OverrIDe public voID destroyItem(VIEwGroup collection, int position, Object vIEw) { collection.removeVIEw((VIEw) vIEw); } });}}
最后是VIEwPager项的布局:
> dayoftheweeklayout.xml
<?xml version="1.0" enCoding="utf-8"?><FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content"> <TextVIEw androID:ID="@+ID/dayOfTheWeekTextVIEw" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:gravity="center" androID:text="Sunday" androID:layout_gravity="center_horizontal"/></FrameLayout>
任何建议将不胜感激.
解决方法:
所以看起来你想要一个轮播视图.
这是食谱:
首先,为了在VIEwPager中向侧面显示页面,您需要在侧面提供一些填充,然后将clipTopadding设置为false:
<androID.support.v4.vIEw.VIEwPager androID:ID="@+ID/weekOfTheDayPager" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:clipTopadding="false" androID:paddingEnd="@dimen/vIEw_pager_padding" androID:paddingleft="@dimen/vIEw_pager_padding" androID:paddingRight="@dimen/vIEw_pager_padding" androID:paddingStart="@dimen/vIEw_pager_padding"/>
接下来,您需要覆盖PagerAdapter中的getPageWIDth,以告诉VIEwPager您希望一次显示三个页面:
@OverrIDe public float getPageWIDth(int position) { return 1F / 3F; }
然后你需要告诉VIEwPager使用自定义的Pagetransformer:
vIEwPager.setPagetransformer(false, new MyPagetransformer());
…
public static class MyPagetransformer implements VIEwPager.Pagetransformer { private ArgbEvaluator mcolorFade = new ArgbEvaluator(); @OverrIDe public voID transformPage(VIEw page, float position) { // position is 0 when page is centered (current) // -1 when page is all the way to the left // +1 when page is all the way to right // Here's an example of how you might morph the color int color = mcolorFade(Math.abs(position), color.RED, color.GRAY); TextVIEw tv = (TextVIEw) page.findVIEwByID(R.ID.dayOfTheWeekTextVIEw); tv.setTextcolor(color); }}
可能有些东西我忘记了,但搜索SO“for androID vIEwpager carousel”,你会在某处找到答案.
总结以上是内存溢出为你收集整理的android – ViewPager与项目预览全部内容,希望文章能够帮你解决android – ViewPager与项目预览所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)