jude95 / rollviewpager Goto Github PK
View Code? Open in Web Editor NEWA ViewPager can auto play and loop
A ViewPager can auto play and loop
使用LoopPagerAdapter的时候,会有部分网络图片加载不出来,不入有加载了5张网络图片,可能就会有三张网络图片加载不出来,然后重新刷新又会出来
如题
PointHintView其实可以抽象出一个基类,方便继承实现N多种指示器。如:
public abstract class ShapeHintView extends LinearLayout implements HintView {
private Drawable focusDrawable, normalDrawable;
protected abstract Drawable makeFocusDrawable();
protected abstract Drawable makeNormalDrawable();
@Override
public void makeView(int length, int gravity) {
...
normalDrawable = makeNormalDrawable();
focusDrawable = makeFocusDrawable();
...
}
public class CircleHintView extends ShapeHintView {
@Override
protected Drawable makeFocusDrawable() {
GradientDrawable dot_focus = new GradientDrawable();
dot_focus.setColor(Color.parseColor("#E3AC42"));
dot_focus.setCornerRadius(Util.dip2px(getContext(), 4));
dot_focus .setSize(Util.dip2px(getContext(), 8), Util.dip2px(getContext(), 8));
return dot_focus ;
}
@Override
protected Drawable makeNormalDrawable() {
GradientDrawable dot_normal = new GradientDrawable();
dot_normal.setColor(Color.WHITE);
dot_normal.setAlpha(125);
dot_normal.setCornerRadius(Util.dip2px(getContext(), 4));
dot_normal.setSize(Util.dip2px(getContext(), 8), Util.dip2px(getContext(), 8));
return dot_normal;
}
public class IconHintView extends ShapeHintView {
protected Drawable makeFocusDrawable() {
return context.getDrawable(android.R.drawable.button_onoff_indicator_on);;
}
protected Drawable makeNormalDrawable() {
return context.getDrawable(android.R.drawable.button_onoff_indicator_off);;
}
}
两张图片的时候 是没问题的 有动画
远程库导入不了我的项目里面。。。
在5.0以上运行没有问题,但是在4.4以下却是空白,什么都不显示。
是不是不兼容5.0以下版本?
以下是我的代码:
在RecyclerView Holder中嵌入RollPagerView
public class ViewBannerHolder extends RecyclerView.ViewHolder{
@BindView(R.id.news_banner)
RollPagerView mNewsBanner;
ViewBannerHolder(View v, List<News> topNewses) {
super(v);
ButterKnife.bind(this, v);
this.mNewsBanner.setHintView(new ColorPointHintView(v.getContext(), Color.YELLOW, Color.WHITE));
this.mNewsBanner.setAdapter(new TopNewsLoopAdapter(mNewsBanner, topNewses));
}
}
在RecyclerView.Adapter的onCreateViewHolder()方法中构建ViewBannerHolder:
if(position == 0 && null != mTopNewses){
View view = this.mLayoutInflater.inflate(R.layout.news_adapter_banner, parent, false);;
return new ViewBannerHolder(view, mTopNewses);
}
RollViewPaper Adapter:
public class TopNewsLoopAdapter extends LoopPagerAdapter {
private List<News> mTopNews;
public TopNewsLoopAdapter(RollPagerView viewPager) {
super(viewPager);
}
public TopNewsLoopAdapter(RollPagerView viewPager, List<News> topNews){
super(viewPager);
this.mTopNews = topNews;
}
@Override
public View getView(ViewGroup container, int position) {
View view = LayoutInflater.from(container.getContext()).inflate(R.layout.news_adapter_banner_view, container, false);
final News news = this.mTopNews.get(position);
ImageView imageView = (ImageView)view.findViewById(R.id.news_banner_image);
ImageUtil.displayImage(container.getContext(), imageView, news.getImage());
TextView textView = (TextView)view.findViewById(R.id.news_banner_title);
textView.setText(news.getTitle());
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), NewsDetailActivity.class);
intent.putExtra("newsId", news.getId());
v.getContext().startActivities(new Intent[]{intent});
}
});
return view;
}
@Override
protected int getRealCount() {
return null==this.mTopNews ? 0 : this.mTopNews.size();
}
}
能往一个方向轮播么?比如往左都只往左无限轮播,现在是第一张左划不到最后一张,最后一张右滑不到第一张
而且不管传入什么大小图片,圆点大小都不变.
<com.jude.rollviewpager.RollPagerView
android:layout_width="match_parent"
android:layout_height="@dimen/base168dp"
android:id="@+id/tabhome_autovp"
app:rollviewpager_play_delay="3000"
app:rollviewpager_hint_paddingBottom="@dimen/base8dp"
></com.jude.rollviewpager.RollPagerView>
tabhomeAutovp.setHintView(new IconHintView(getActivity(), R.drawable.point_white, R.drawable.point_white80));
tabhomeAutovp.setAdapter(new LoopAdapter(tabhomeAutovp, vpPics));
用LoopPagerAdapter时,getCount值是Integer.MAX_VALUE,这样会很耗性能的呀
没有ItemClick事件吗?
。。
有下拉刷新和viewpager的时候,左右华东bannar很难滑动
我在Activity的onCreate()中调用setAdapter()没有任何问题。但是,出于一种需求,我开启一个线程去获取新的图片,在图片获取结束后在runOnUiThread中调用setAdapter()更换成新的图片时,出现ANR,界面卡死,UI线程CPU满占用,十几秒后才恢复。即使我在getView()中返回new ImageView(container.getContext()),也是一样卡死,说明不是我在getView()中做耗时操作造成的这个ANR。望修复这个bug
==补充:broadcastreceiver的onReceive()事件中进行setAdapter()也不行
比如手指左滑 : 在第三页拖到第四页, 拖动到一半(或多或少都会) 然后取消滑动。
正常是回到第三页的。
但是有时会直接退回到第二页去。(换个方向也会)
在魅蓝上是好的
但是在三星note4上Error是OOM,应该显示图片的地方显示黑块
建议在只有一张图片的情况下,禁止viewpager的滑动
ScrollView包含RollViewPager不显示
以下是布局
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="@color/_ffffff_bg"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="23dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<!--<fragment-->
<!--android:id="@+id/cycleViewPager"-->
<!--android:name="goujiawang.gjw.views.helpers.CycleViewPager"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="@dimen/px450"-->
<!--android:background="@drawable/cache_normal_new"-->
<!--app:layout_collapseMode="parallax"-->
<!--app:layout_collapseParallaxMultiplier="0.5" />-->
<com.jude.rollviewpager.RollPagerView
android:id="@+id/rollPagerView"
android:layout_width="match_parent"
android:layout_height="@dimen/px450"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolBar"
style="@style/ClubToolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/px88"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay">
<RelativeLayout
android:id="@+id/layout_topBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_gray_alpha_gradient">
<TextView
android:id="@+id/textView_left"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:background="@drawable/selector_bg_click_color_alpha"
android:drawableRight="@mipmap/ic_arrow_down_white"
android:gravity="center"
android:paddingLeft="@dimen/contentPaddingLeft"
android:text="定位"
android:textColor="@color/_ffffff_word"
android:textSize="@dimen/sp32" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/gj"
android:textSize="@dimen/sp36" />
<ImageView
android:id="@+id/imageView_right"
android:layout_width="@dimen/statusBarHeight"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/selector_bg_click_color_alpha"
android:contentDescription="@null"
android:padding="@dimen/px15"
android:src="@mipmap/ic_service_white" />
</RelativeLayout>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/px80"
android:background="@color/_ffffff_bg"
app:tabIndicatorColor="@color/_ff5722"
app:tabIndicatorHeight="@dimen/px4"
app:tabMode="fixed"
app:tabPaddingStart="@dimen/px20"
app:tabSelectedTextColor="@color/_ff5722"
app:tabTextColor="@color/_000000_word" />
</android.support.design.widget.AppBarLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager_home"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/iv_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="96dp"
android:background="@mipmap/bg_empty"
android:contentDescription="@null"
android:visibility="gone" />
</RelativeLayout>
代码
rollPagerView.setPlayDelay(1000);
rollPagerView.setAnimationDurtion(500);
rollPagerView.setAdapter(new TestLoopAdapter(rollPagerView));
private class TestLoopAdapter extends LoopPagerAdapter {
private List homes;
private int[] imgs = {
R.drawable.cache_normal_new,
R.drawable.cache_normal_new,
R.drawable.cache_normal_new,
R.drawable.cache_normal_new,
};
public TestLoopAdapter(RollPagerView viewPager) {
super(viewPager);
}
@Override
public View getView(ViewGroup container, int position) {
ImageView view = new ImageView(container.getContext());
view.setScaleType(ImageView.ScaleType.CENTER_CROP);
view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
view.setImageResource(imgs[position]);
return view;
}
@Override
public int getRealCount() {
return imgs.length;
}
}
----------------------------------------------ANR traces 文件中的一部分------
suspend all histogram: Sum: 28.329ms 99% C.I. 4us-8345.600us Avg: 191.412us Max: 10203us
DALVIK THREADS (31):
"main" prio=5 tid=1 Runnable
| group="main" sCount=0 dsCount=0 obj=0x7479a3c0 self=0xb4d36500
| sysTid=20874 nice=-1 cgrp=default sched=0/0 handle=0xb6fb8b34
| state=R schedstat=( 38664505309 1819560990 7246 ) utm=3783 stm=83 core=3 HZ=100
| stack=0xbe0f6000-0xbe0f8000 stackSize=8MB
| held mutexes= "mutator lock"(shared held)
at android.support.v4.view.PagerAdapter.getPageWidth(PagerAdapter.java:330)
at android.support.v4.view.ViewPager.calculatePageOffsets(ViewPager.java:1292)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1165)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1025)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545)
at android.view.View.measure(View.java:18811)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.design.widget.CollapsingToolbarLayout.onMeasure(CollapsingToolbarLayout.java:373)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.support.design.widget.AppBarLayout.onMeasure(AppBarLayout.java:199)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:664)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:731)
at android.view.View.measure(View.java:18811)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1560)
at android.view.View.measure(View.java:18811)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18811)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
at android.view.View.measure(View.java:18811)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2120)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1236)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1472)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1127)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6038)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:860)
at android.view.Choreographer.doCallbacks(Choreographer.java:672)
at android.view.Choreographer.doFrame(Choreographer.java:608)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:846)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5438)
at java.lang.reflect.Method.invoke!(Native method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
数字显示器
设置颜色没有用,总是显示白色
app:rollviewpager_hint_color="#000"
Error:Execution failed for task ':XXXX:processDebugManifest'.
Manifest merger failed with multiple errors, see logs
在主要的 Moudle 中的 AndroidMenifest.xml 如果已有屬性
< application
android:theme="@android:style/Theme.XXX>
< /application>
則在引用的 Library Moudle 中的 AndroidMenifest.xml 也設有相同的屬性設置
android:theme="@android:style/Theme.XXX
則會報出上述錯誤,將 Library Moudle 中的該屬性消除即可。
场景是数据源一开始是零,访问网络后拿到了数据然后通过notifyDataSetChanged更新,但是一直往前滑的话就滑不动了,只能往后滑
如何添加点击事件呢~ 我重写的instantiateItem 控制吗?
不好意思又来了。。我用了LoopPagerAdapter的notifydatasetchange方法,但是使用后似乎向左滑动会出现问题,在第一张图时会无法向左滑动。。。
轮播图循环时,要等很久才能加载出图片是什么原因呢,求解答
补充:是在请求网络之后再加载要等很久才能加载,尽管轮播图没有用到任何网络数据,setAdapter也执行完了,图片还是没有出来,用PagerView也有这种情况
与Glide图片加载框架结合使用时,加载进来的图片有时会比例失真,有时又是比例正常的。请解决比例失真的bug
代码:
LoopPagerAdapter loopPagerAdapter=new LoopPagerAdapter(rollPagerView) {
@OverRide
public View getView(ViewGroup container, int position) {
ImageView imageView = new ImageView(container.getContext());
Glide
.with(MainFragment.this)
.load(xxxxxxxUrl)
.centerCrop()
//.placeholder(R.color.windowBackground)
//.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.crossFade()
.into(imageView);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return imageView;
}
@Override
public int getRealCount() {
return rollPicList==null?1:rollPicList.size();
}
};
rollPagerView.setAdapter(loopPagerAdapter);
rollPagerView.setPlayDelay(4000);
}
这个支持自定义的fragment显示吗?
照片由多变少的时候(大于一变为小于等于一) 底部indicator没有被初始化
需要把RollPagerView中的initHint改为public 然后再适配器的getview中作判断
if (_urls.size() < 2) {
_viewPager.setHintView(null);
} else {
_viewPager.initHint(
new ColorPointHintView(_viewPager.getContext(), Color.parseColor("#394482"),
Color.parseColor("#88ffffff")));
}
我这里大于1张才显示indicator。
大神可以考虑把它加到LoopPagerAdapter中
请问可以为轮播页添加文字随图片一起滚动播放吗
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
比如说,刚开始的广告有4页,刷新后只有1页时.只要上次的广告停留的不是第一页,刷新后不仅图片没有刷新,而且必崩。提示信息如下
java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 4, found: 1 Pager id: com.zhipu.salehelper.referee:id/viewpager_inner Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.zhipu.salehelper.referee.adapter.HomeLooperAdapter
at android.support.v4.view.ViewPager.populate(ViewPager.java:1000)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
at com.zhipu.salehelper.referee.widget.rollviewpager.RollPagerView$TimeTaskHandler.handleMessage(RollPagerView.java:133)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5549)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
可以看出at com.zhipu.salehelper.referee.widget.rollviewpager.RollPagerView$TimeTaskHandler.handleMessage(RollPagerView.java:133)
这一行崩的。
刷新代码如下
bannerList.clear();
bannerList.addAll(list);
mLooperAdapter.notifyDataSetChanged();
如果只有两张图片的话,初始化默认会显示第二张图片,但指示器默认会显示的是第一个。也就是指示器和图片不匹配。只在初始化的时候有这个问题,轮播开始之后就正常了。
怎么用textHint?
轮播图怎么无限循环呢
滑动不好使,在右侧向左滑的时候很难滑动到下一页
如果使用LoopPagerAdapter,在配合上Picasso轮播网络图片时,如果网络图片稍大,会导致页面挂起,等待Picasso图片加载完毕后才会恢复,而使用staticPagerAdapter时没有这个问题。
如题
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.