Giter Site home page Giter Site logo

luckyjayce / viewpagerindicator Goto Github PK

View Code? Open in Web Editor NEW
2.6K 120.0 627.0 35.42 MB

Indicator 取代 tabhost,实现网易顶部tab,新浪微博主页底部tab,引导页,无限轮播banner等效果,高度自定义tab和特效,LazyFragment

License: Apache License 2.0

Java 100.00%

viewpagerindicator's Introduction

ViewPagerIndicator

1. 支持自定义tab样式

2. 支持自定义滑动块样式和位置

3. 支持自定义切换tab的过渡效果

4. 支持子界面的预加载和界面缓存

5. 支持设置界面是否可滑动

6. android:minSdkVersion="14"

7.导入方式

<1>gradle导入

implementation 'com.shizhefei:ViewPagerIndicator:1.1.9'
由于用到了v4和recyclerview所以也要导入他们
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'

<1>androidx gradle导入

implementation 'com.shizhefei:ViewPagerIndicator:1.1.9.androidx'
由于用到了v4和recyclerview所以也要导入他们
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'

<2>jar包方式导入 Download Library JAR

Download sample Apk

8.历史版本和更新信息

https://github.com/LuckyJayce/ViewPagerIndicator/releases

使用方法

package com.shizhefei.indicator.guide;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;

import com.shizhefei.indicator.R;
import com.shizhefei.view.indicator.Indicator;
import com.shizhefei.view.indicator.IndicatorViewPager;
import com.shizhefei.view.indicator.IndicatorViewPager.IndicatorPagerAdapter;
import com.shizhefei.view.indicator.IndicatorViewPager.IndicatorViewPagerAdapter;

public class GuideActivity extends FragmentActivity {
	private IndicatorViewPager indicatorViewPager;
	private LayoutInflater inflate;

	@Override
	protected void onCreate(Bundle arg0) {
		super.onCreate(arg0);
		setContentView(R.layout.activity_guide);
		ViewPager viewPager = (ViewPager) findViewById(R.id.guide_viewPager);
		Indicator indicator = (Indicator) findViewById(R.id.guide_indicator);
		// 将viewPager和indicator使用
		indicatorViewPager = new IndicatorViewPager(indicator, viewPager);
		inflate = LayoutInflater.from(getApplicationContext());
		// 设置indicatorViewPager的适配器
		indicatorViewPager.setAdapter(adapter);
	}

	private IndicatorPagerAdapter adapter = new IndicatorViewPagerAdapter() {
		private int[] images = { R.drawable.p1, R.drawable.p2, R.drawable.p3,
				R.drawable.p4 };

		/**
		 * 获取tab
		 */
		@Override
		public View getViewForTab(int position, View convertView,
				ViewGroup container) {
			if (convertView == null) {
				convertView = inflate.inflate(R.layout.tab_guide, container,
						false);
			}
			return convertView;
		}

		/**
		 * 获取每一个界面
		 */
		@Override
		public View getViewForPage(int position, View convertView,
				ViewGroup container) {
			if (convertView == null) {
				convertView = new View(getApplicationContext());
				convertView.setLayoutParams(new LayoutParams(
						LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
			}
			convertView.setBackgroundResource(images[position]);
			return convertView;
		}

		/**
		 * 获取界面数量
		 */
		@Override
		public int getCount() {
			return images.length;
		}
	};
}

效果图

有了该类库你可以实现以下布局 image image image image image

主要的类

1.ViewPager

这个版本以后 android-support-v4 可以用原生的了 没有重写ViewPager。 原先重写的ViewPager的setPrepareNumber 用 Fragment继承于LazyFragment代替实现懒加载 原先setCanScroll 转移到了 ViewPager的子类SViewPager上

2.使用ProxyLazyFragment或者继承LazyFragment来配合ViewPager的setOffscreenPageLimit进行懒加载界面和防止重新创建界面

2.Indicator

顾名思义是指示器的意思。有点像水平方向的listview 可以自定义item。

Indicator setCurrentItem(int item, boolean anim) 设置当前项 setOnTransitionListener(OnTransitionListener onTransitionListener)设置tab过渡动画 setOnItemSelectListener(OnItemSelectedListener onItemSelectedListener)设置tab切换监听 setScrollBar(ScrollBar scrollBar)设置跟随tab滑动的滑动块

1.FixedIndicatorView 主要用于固定大小来平均分配tab的情况。 setSplitMethod(int splitMethod) 设置tab分割方式,平均分割,wrap分割,比重分割 setCenterView(View centerView, ViewGroup.LayoutParams layoutParams)设置显示在tab中心的View,用于实现新浪微博底部+号 getCenterView();

2.ScrollIndicatorView 主要用于多个tab可以进行滑动。 setSplitAuto(boolean splitAuto) 设置是否自动分割,当总tab宽度小于Indicator宽度就平均分割tab,或者比重分割。大于Indicator宽度就wrap分割 setPinnedTabView(boolean isPinnedTabView) 设置是否固定第一个tab setPinnedShadow(Drawable shadowDrawable, int shadowWidth)设置固定tab的阴影

3.RecyclerIndicatorView 主要用于无数个tab可以进行滑动。 优点适用于tab很多的情况,缺点tab少的时候没有ScrollIndicatorVie的自动分割功能。

方法:

<1>setAdapter(IndicatorAdapter adapter) 设置适配器 注意:在使用indicatorViewPager后这个方法会被indicatorViewPager使用 <2> setOnItemSelectListener(OnItemSelectListener listener) 设置选中监听 注意:在使用indicatorViewPager后这个方法会被indicatorViewPager使用 <3> setOnIndicatorItemClickListener(OnIndicatorItemClickListener listener) 设置Indicator tab项的点击事件,在Indicator 的 onItemSelectListener前触发和拦截处理 <4> setOnTransitionListener(OnTransitionListener listener) 设置滑动变化的转换监听,tab在切换过程中会调用此监听 设置它可以自定义实现在滑动过程中,tab项的字体变化,颜色变化等等效果 <5> setScrollBar(ScrollBar scrollBar) 设置滑动块,设置它可以自定义滑动块的样式

3.indicatorViewPager

用于将ViewPager和Indicator 联合使用。

		indicatorViewPager.setAdapter(IndicatorPagerAdapter adapter)  
        // 设置它可以自定义实现在滑动过程中,tab项的字体变化,颜色变化等等过渡效果  
		indicatorViewPager.setIndicatorOnTransitionListener(onTransitionListener);  
		// 设置它可以自定义滑动块的样式  
		indicatorViewPager.setIndicatorScrollBar(scrollBar);  
		// 设置page是否可滑动切换  
		indicatorViewPager.setPageCanScroll(false);  
		/*
		 * 设置缓存界面的个数,左右两边缓存界面的个数,不会被重新创建。 默认是1,表示左右两边  
		 * 相连的1个界面和当前界面都会被缓存住,比如切换到左边的一个界面,那个界面是不会重新创建的。  
		 */  
		indicatorViewPager.setPageOffscreenLimit(1);  
		/*
		 * 设置预加载界面的个数。左右两边加载界面的个数 默认是1,表示左右两边 相连的1个界面会和当前界面同时加载  
		 */  
		indicatorViewPager.setPagePrepareNumber(1);  
		// 设置页面切换监听  
		indicatorViewPager.setOnIndicatorPageChangeListener(onIndicatorPageChangeListener);  
		// 设置page间的图片的宽度  
		indicatorViewPager.setPageMargin(1);  
		// 设置page间的图片  
		indicatorViewPager.setPageMarginDrawable(d);  

4.BannerComponent (无限轮播Banner)

继承于IndicatorViewPager,所以使用方法和IndicatorViewPager一样
setAutoPlayTime(long time) 设置自动播放的间隔时间
startAutoPlay(); 开始播放
stopAutoPlay(); 停止播放

5.IndicatorPagerAdapter

子类IndicatorFragmentPagerAdapter 用于 界面是fragment的形式。 子类IndicatorViewPagerAdapter 用于 界面是View的形式.

indicatorViewPager.setOnIndicatorPageChangeListener(onIndicatorPageChangeListener)设置界面的切换监听。

Indicator 既可以单独使用。也可以通过indicatorViewPager的形式联合viewpager一起使用。

6.ScrollBar

tab的滑动块通过indicatorViewPager.setIndicatorScrollBar(scrollBar);进行设置 子类有
ColorBar 颜色的滑动块
DrawableBar 图片滑动块
LayoutBar 布局滑动块
TextWidthColorBar 大小同tab里的text一样宽的颜色的滑动块
SpringBar 实现拖拽效果的圆形滑动块 该类修改于https://github.com/chenupt/SpringIndicator

7.OnTransitionListener

子类有
OnTransitionTextListener tab的字体颜色变化,和字体大小变化效果

8.LazyFragment or ProxyLazyFragment 懒加载Fragment

懒加载原理

一开始onCreateView的时候只是加载一个空的FrameLayout
当通过结合onCreateView和setUserVisibleHint两个方法进行判断是否需要加载真正的布局界面,需要的时候再把实际的布局加载上去

继承 LazyFragment实现懒加载

Fragment继承该类实现 显示Framgment的时候才会去创建你自己的界面布局,否则不创建。

  1. 继承于LazyFragment

  2. 回调方法:
    onCreateViewLazy 对应 onCreateView
    onDestroyViewLazy 对应 onDestroyView
    onResumeLazy 对应 onResume
    onPauseLazy 对应 onPause
    onDestroy 和 onCreate 方法不变
    另外添加了onFragmentStartLazy fragment显示的时候调用,在ViewPager界面切换的时候你就可以通过这个判断是否显示
    onFragmentStopLazy fragment不显示的时候调用
    上面所有有lazy结尾的方法都意味着 真正的布局正在显示

  3. 使用方法
    放心在onCreateViewLazy 的时候创建布局,初始化数据。调用该方法的时候,界面已经要显示啦 在onDestroyViewLazy的方法里面做释放操作

通过ProxyLazyFragment 代理 实际的Fragment实现懒加载

该代理LazyFragment的**源于 https://github.com/shenguojun/LazyFragmentTest ,不过里面有些实现细节有点不一样

  1. 调用 ProxyLazyFragment.lazy(BookFragment.class, arguments),其中BookFragment不限制继承可以直接继承Fragment
Bundle arguments = new Bundle();
arguments.putInt(BookFragment.EXTRA_INT_POSITION, position);
ProxyLazyFragment fragment = ProxyLazyFragment.lazy(BookFragment.class, arguments);

主力类库

1.https://github.com/LuckyJayce/ViewPagerIndicator
Indicator 取代 tabhost,实现网易顶部tab,新浪微博主页底部tab,引导页,无限轮播banner等效果,高度自定义tab和特效

2.https://github.com/LuckyJayce/MVCHelper
实现下拉刷新,滚动底部自动加载更多,分页加载,自动切换显示网络失败布局,暂无数据布局,支持任意view,支持切换主流下拉刷新框架。

3.https://github.com/LuckyJayce/EventBus-Apt
事件总线,通过动态代理接口的形式发布,接收事件。定义一个接口把事件发给注册并实现接口的类

4.https://github.com/LuckyJayce/LargeImage
大图加载,可供学习

5.https://github.com/LuckyJayce/GuideHelper
新手引导页,轻松的实现对应的view上面的显示提示信息和展示功能给用户

6.https://github.com/LuckyJayce/HVScrollView
可以双向滚动的ScrollView,支持嵌套ScrollView联级滑动,支持设置支持的滚动方向

7.https://github.com/LuckyJayce/CoolRefreshView
下拉刷新RefreshView,支持任意View的刷新 ,支持自定义Header,支持NestedScrollingParent,NestedScrollingChild的事件分发,嵌套ViewPager不会有事件冲突

有了这些类库,让你6的飞起

说明

项目 ViewPagerIndicator_Demo 是示例代码。 看了这个例子你会惊奇的发现里面居然都是通过viewpager实现,没有使用tabhost,而所有形式的tab都是用Indicator实现。 项目 ViewPagerIndicator_Library 是类库

有什么建议可以发到我的邮箱 [email protected]

License

Copyright 2014 shizhefei(LuckyJayce)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

viewpagerindicator's People

Contributors

luckyjayce avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

viewpagerindicator's Issues

Tab里的fragment 如果被回收了怎么重建呢?

Hello, 用了这个作为主TAB界面,但是如果TAB中的Fragment被回收了怎么恢复呢?目前运行程序,将将它放到后台,然后用adb shell kill -9 pid 去模仿它被回收的情况,结果重新点击应用进去的话,会出现其它tab白屏的现象。求支招呀。

NullPointException一直没发现这个问题在哪里

java.lang.NullPointerException
at com.shizhefei.view.indicator.FragmentListPageAdapter.instantiateItem(FragmentListPageAdapter.java:139)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1034)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1182)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
at android.view.View.measure(View.java:15523)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:15523)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
at android.view.View.measure(View.java:15523)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4357)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
at android.view.Choreographer.doCallbacks(Choreographer.java:562)
at android.view.Choreographer.doFrame(Choreographer.java:532)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

如何配置ProGurad规则?

-keep class com.shizhefei.** { *;} -dontwarn com.shizhefei.view.indicator.RecyclerIndicatorView

使用了上面的规则后,能够打出release 版本,但是运行时会导致

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.greenteam.snackshopping/com.greenteam.snackshopping.activity.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.shizhefei.view.indicator.Indicator.setItemClickable(boolean)' on a null object reference

不足之处?

自定义adapter继承自IndicatorViewPager.IndicatorViewPagerAdapter.
应用的情景中getViewForPage方法里面返回的View是依赖于数据源的,而更新数据源后那个View不会立刻进行更新,即使是调用了notifyDataSetChanged(),个人觉得这样不符合实际应用情况.请问有没有解决方法?

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:682)
at com.shizhefei.view.indicator.FragmentListPageAdapter.restoreState(FragmentListPageAdapter.java:203)
at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1448)
at android.view.View.dispatchRestoreInstanceState(View.java:13788)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2889)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2897)
at android.view.View.restoreHierarchyState(View.java:13766)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:475)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1131)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:532)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5601)
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)

请问是什么问题?

1.1.4版本初始化异常

我切换成1.1.4版本后,初始化时抛出NullPointerException
关键代码:

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        indicatorViewPager = new IndicatorViewPager(indicatorView, viewPager);
        indicatorView.setScrollBar(new ColorBar(this, Color.BLUE, 5));
        indicatorViewPager.setPageOffscreenLimit(2);

异常:

java.lang.NullPointerException
at com.shizhefei.view.indicator.FixedIndicatorView.measureScrollBar(FixedIndicatorView.java:499)
at com.shizhefei.view.indicator.FixedIndicatorView.onSizeChanged(FixedIndicatorView.java:564)
at android.view.View.sizeChange(View.java:14993)
at android.view.View.setFrame(View.java:14966)
at android.view.View.layout(View.java:14874)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.HorizontalScrollView.onLayout(HorizontalScrollView.java:1474)
at com.shizhefei.view.indicator.ScrollIndicatorView.onLayout(ScrollIndicatorView.java:188)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1551)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1460)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1551)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1460)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
....

tab全白屏

不知道什么原因,如果内存不足时,应用程序有些activity被回收了,可能会导致有些tab白屏,急啊。

java.lang.NullPointerException: Attempt to invoke interface method 'void com.shizhefei.view.indicator.Indicator.setItemClickable(boolean)' on a null object reference

             java.lang.NullPointerException: Attempt to invoke interface method 'void com.shizhefei.view.indicator.Indicator.setItemClickable(boolean)' on a null object reference
                                                                at com.shizhefei.view.indicator.IndicatorViewPager.<init>(IndicatorViewPager.java:50)
                                                                at com.shizhefei.view.indicator.IndicatorViewPager.<init>(IndicatorViewPager.java:43)

bug?

可滑动tab界面里,选择12个,进去后点击最后一个tab,这组tab不会动,下面的指示器会移动过来。再点击第一个tab,这组tab会先跳动一下,然后指示器才会移动过来。也就是说点击tab的时候,这组tab有时会跳动,有时不会跳动。

ScrollIndicatorView 动态添加失败

indicatorViewPager = new IndicatorViewPager(indicator, viewPager);
indicatorViewPager.setAdapter(new MyAdapter(getSupportFragmentManager(), listTab, listData));
viewPager.setCanScroll(true);
viewPager.setOffscreenPageLimit(2);

在MyAdapter中的自定义变量listTab,listData进行动态增加,界面没有变化。

class not found ,don't find class com.mustfun/MainActivity on tath /data/app/

用你的libiary报了这个错,就是说没有找到MainActivity这个class,推测是因为Android-support-v4.jar版本引入不一致问题,但是我引入了没有修改的androi-support-v4.jar,程序可以跑起来,只是说没有iscanscroll这个函数,但是引入了你修改的support-v4,就报了上面这个错,libiary也是引入的这个文件,希望尽快解决, 谢谢

OnTransitionTextListener 颜色问题

if (selectColor != -1 && unSelectColor != -1) {
selectTextView.setTextColor(gradient.getColor((int) (selectPercent * 100)));
}

貌似#ffffff的值是-1,就不会触发这里

集成多个scrollindicatorview 问题

您好!

在 fragment_tabmain.xml中将FixedIndicatorView 改为 ScrollIndicatorView的形式,并设置auto split
结果出现第二个tab,没有auto split, 除非手动滑动一下才出现
第一个tab正常加载
2
第二个tab的scrollindicatorview没有auto split
3
手动左右滑动就行了。
4

请您fix 下,非常感谢

ScrollIndicatorView.setOnItemSelectListener无效

代码如下:
int selectColorId = R.color.color_1eb7d2;
int unSelectColorId = R.color.color_434343;
int colorIndicat = Color.parseColor("#1eb7d2");

    indicator.setScrollBar(new ColorBar(context, colorIndicat, 10));
    indicator.setOnTransitionListener(new OnTransitionTextListener().setColorId(context, selectColorId, unSelectColorId));

    indicator.setOnItemSelectListener(new Indicator.OnItemSelectedListener() {
        @Override
        public void onItemSelected(View view, int i, int i1) {
            //这里无反应?
        }
    });

BannerComponent轮播的问题

BannerComponent使用SpringBar移到最后一个时有显示不全,并且下标为0的Indicator会显示一半的SpringBar。在item的数量为3个的时候.

Error:Execution failed for task ':zhongshengpreferred:transformClassesWithJarMergingForDebug'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/shizhefei/indicator/BuildConfig.class

Error:Execution failed for task ':zhongshengpreferred:transformClassesWithJarMergingForDebug'.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/shizhefei/indicator/BuildConfig.class

不知道为什么就会出这种问题 之前编译还是正常的 现在打开运行项目就出现这个问题 应该是包冲突了 我移除v4包还是会有这个问题

ViewPagerIndicator里面的viewpager回收

ViewPagerIndicator里面的viewpager好像不能很好的回收,有没有让viewpager回收呢,现在我用你的库(没有修改过源码,直接导入工程)来做成类似懂球帝这样的应用,然后内存一直飙升不能回收,我估计是fragment里面的viewpager不能回收view,麻烦帮解答一下或者有什么好的建议提一下好吧?谢谢了!坐等博主的佳音

com.shizhefei.view.indicator.FixedIndicatorView

这个控件为嘛不能把子元素设为平均分布?
我弄了一两个小时,原来是这控件问题
上面这个是我用原生的linnerLayout写的,里面放3个TEXTVIEW,
下面这个是用com.shizhefei.view.indicator.FixedIndicatorView写的,里面动态添加的3个textView,
textview代码是一样的,唯一不同的就是这个父元素,上面的可以正常居中.下面的就无法居中.
我找了N多方法,都不行.除非给textView设定固定宽和高才行.
我是想平均分布有什么办法?
22

android:supportsRtl="true"

android:supportsRtl="true",由于你这里设置了,导致引用你的库后,想要设置android:supportsRtl="false"就会报错。。。宝宝不开心了。。。测试的又打开了开发者模式下的强制从右到左测试。。。。

view会挡住indicator

IndicatorViewPager.IndicatorViewPagerAdapter
里面的view为imageview时(其他的没试过),imageview会挡住viewpager的indicator,但不会超出viewpager的大小.

轮播图的使用有些疑问

    viewPager = (ViewPager)findViewById(R.id.viewPager);
    indicator = (Indicator)findViewById(R.id.indicator);
    // 将viewPager和indicator使用
    bannerComponent = new BannerComponent(indicator, viewPager, true);
    inflater = LayoutInflater.from(getApplicationContext());
    adapter = new IndicatorViewPager.IndicatorViewPagerAdapter() {
            //......
    };
    // 设置indicatorViewPager的适配器
    bannerComponent.setAdapter(adapter);

    bannerComponent.setAutoPlayTime(2000);
    bannerComponent.startAutoPlay();

模拟器在卡顿1分钟左右之后(有时会报ANR),出现轮播。。
真机一直显示空白。
两个的cpu使用率基本在40% ++

如何关闭后台log

每次切换viewpager都会打印log,类似pppp: 1: mPosition:0 offsetX:103.0,要怎么关掉这些log

gpu一直在重绘

打开开发者模式->GPU呈现模式分析>在屏幕上显示为线型图

然后打开viewpagerindicator 这个demo, 点击不同的的TAB时,会发现GPU一直在重绘,这样会很耗电的

ScrollIndicatorView 的TAB使用嵌套layout 导致程序crash

hello,

在demo的moretab->MoreTabActivity中,在设置tab indicator时,如果把tab_top的TextView外加一层RelativeLayout或LinearLayout时,程序直接crash掉

        if (convertView == null) {
            convertView = inflate.inflate(R.layout.tab_top, container, false);
        }
        TextView textView = (TextView) convertView.findViewById(R.id.tab); 

file name: tab_top.xml

image

外层的tab fragment里面再嵌套一层tab fragment会有问题

例如demo里面的tab主界面这个测试例子,现在是外层有4个tab,然后每个tab里面嵌套的是几个viewpager,如果改为嵌套的fragment的话,会发现外层的第一个tab里面的tab是正常的,但是第二个tab里面的tab就有问题了,感觉好像只能实例一个。是否是这种嵌套本身就有问题?

ViewPager引出的bug

java.lang.NoSuchMethodError:
No virtual method addOnPageChangeListener(Landroid/support/v4/view/ViewPager$OnPageChangeListener;)V in class Landroid/support/v4/view/ViewPager;
or its super classes (declaration of 'android.support.v4.view.ViewPager' appears in /data/data/com.weijie.ckapp/files/instant-run/dex/slice-support-v4-r7_6b487e8b8eac5541972e73dc0c160b63dd97c123-classes.dex)

at com.shizhefei.view.indicator.IndicatorViewPager.iniOnPageChangeListener(IndicatorViewPager.java:71)
at com.shizhefei.view.indicator.IndicatorViewPager.(IndicatorViewPager.java:53)
at com.shizhefei.view.indicator.IndicatorViewPager.(IndicatorViewPager.java:43)

StackOverflowError when BannerComponent + RecyclerIndicatorView

java.lang.StackOverflowError: stack size 8MB
at com.shizhefei.view.indicator.IndicatorViewPager$IndicatorViewPagerAdapter$1.getCount(IndicatorViewPager.java:277)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:636)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:632)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:624)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:108)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.indicator.RecyclerIndicatorView.setCurrentItem(RecyclerIndicatorView.java:121)
at com.shizhefei.view.indicator.BannerComponent.setCurrentItem(BannerComponent.java:109)
at com.shizhefei.view.indicator.BannerComponent$1.onItemSelected(BannerComponent.java:64)
at com.shizhefei.view.in

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.