fix bug #3702 java.lang.IndexOutOfBoundsException Index: 0, Size: 0
com.jude.rollviewpager.RollPagerView.dispatchTouchEvent(RollPagerView.java:402)
This commit is contained in:
@@ -218,8 +218,6 @@ dependencies {
|
||||
api "com.darsh.multipleimageselect:multipleimageselect:1.0.4"
|
||||
api "me.shaohui.advancedluban:library:1.3.5"
|
||||
api "pl.droidsonroids.gif:android-gif-drawable:1.2.7"
|
||||
// api "com.jude:rollviewpager:1.4.6"
|
||||
implementation 'com.github.dongxingrong:RollViewPager:V1.0'
|
||||
api "com.makeramen:roundedimageview:2.3.0"
|
||||
api "com.jzxiang.pickerview:TimePickerDialog:1.0.1"
|
||||
api "com.github.zyyoona7:EasyPopup:1.0.2"
|
||||
|
2
app/proguard-rules.pro
vendored
2
app/proguard-rules.pro
vendored
@@ -318,7 +318,7 @@
|
||||
|
||||
#暂时keep这个View排查华为oom问题
|
||||
-keep class com.yizhuan.erban.avroom.widget.MicroView{*;}
|
||||
-keep class com.jude.rollviewpager.RollPagerView{*;}
|
||||
-keep class com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView{*;}
|
||||
|
||||
#linkedMe
|
||||
-keep class com.microquation.linkedme.android.** { *; }
|
||||
|
@@ -35,9 +35,9 @@ import android.widget.TextView;
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.coorchice.library.SuperTextView;
|
||||
import com.jude.rollviewpager.RollPagerView;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.netease.nim.uikit.common.antispam.AntiSpamEvent;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
|
@@ -15,8 +15,8 @@ import android.view.ViewStub;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
|
@@ -7,7 +7,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.jude.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.avroom.activity.AVRoomActivity;
|
||||
|
@@ -8,7 +8,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.jude.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.avroom.activity.AVRoomActivity;
|
||||
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
|
||||
|
@@ -27,9 +27,9 @@ import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.jude.rollviewpager.RollPagerView;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.netease.nim.uikit.support.glide.GlideRequest;
|
||||
|
@@ -8,9 +8,9 @@ import android.view.View;
|
||||
|
||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.jude.rollviewpager.RollPagerView;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.ui.widget.RoomItemView;
|
||||
import com.yizhuan.xchat_android_core.home.bean.BannerInfo;
|
||||
|
@@ -13,7 +13,7 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.jude.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.avroom.activity.AVRoomActivity;
|
||||
|
@@ -8,7 +8,7 @@ import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.coorchice.library.utils.LogUtils;
|
||||
import com.jude.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.opensource.svgaplayer.SVGADrawable;
|
||||
import com.opensource.svgaplayer.SVGAImageView;
|
||||
import com.opensource.svgaplayer.SVGAParser;
|
||||
|
@@ -11,9 +11,9 @@ import android.view.ViewGroup;
|
||||
|
||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.jude.rollviewpager.RollPagerView;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.ui.widget.RoomItemView;
|
||||
import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil;
|
||||
|
@@ -14,9 +14,9 @@ import android.widget.TextView;
|
||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.jude.rollviewpager.RollPagerView;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.yizhuan.erban.R;
|
||||
|
@@ -18,9 +18,9 @@ import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.jude.rollviewpager.RollPagerView;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.netease.nim.uikit.api.NimUIKit;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
|
||||
|
@@ -32,8 +32,8 @@ import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
|
||||
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.coorchice.library.utils.LogUtils;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.yizhuan.erban.MainActivity;
|
||||
|
@@ -16,7 +16,7 @@ import androidx.core.widget.NestedScrollView;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.jude.rollviewpager.hintview.TextHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.TextHintView;
|
||||
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.netease.nimlib.sdk.RequestCallbackWrapper;
|
||||
@@ -480,6 +480,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
if (ListUtils.isListEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
|
||||
TextHintView hintView = new TextHintView(this);
|
||||
hintView.setBackground(getResources().getDrawable(R.drawable.bg_userinfo_photo_hintview));
|
||||
hintView.setTextSize(SizeUtils.dp2px(this, 4));
|
||||
|
@@ -8,7 +8,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.jude.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.StaticPagerAdapter;
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.UIHelper;
|
||||
import com.yizhuan.erban.ui.setting.SettingActivity;
|
||||
|
@@ -0,0 +1,10 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager;
|
||||
|
||||
|
||||
public interface HintView {
|
||||
|
||||
void initView(int length, int gravity);
|
||||
|
||||
void setCurrent(int current);
|
||||
}
|
||||
|
@@ -0,0 +1,8 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager;
|
||||
|
||||
/**
|
||||
* Created by zhuchenxi on 16/8/4.
|
||||
*/
|
||||
public interface OnItemClickListener {
|
||||
void onItemClick(int position);
|
||||
}
|
@@ -0,0 +1,443 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.database.DataSetObserver;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.GradientDrawable;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.GestureDetector;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.Interpolator;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.Scroller;
|
||||
|
||||
import androidx.viewpager.widget.PagerAdapter;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
|
||||
|
||||
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.adapter.LoopPagerAdapter;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
/**
|
||||
* 支持轮播和提示的的viewpager
|
||||
*/
|
||||
public class RollPagerView extends RelativeLayout implements OnPageChangeListener {
|
||||
|
||||
private ViewPager mViewPager;
|
||||
private PagerAdapter mAdapter;
|
||||
private OnItemClickListener mOnItemClickListener;
|
||||
private GestureDetector mGestureDetector;
|
||||
|
||||
private long mRecentTouchTime;
|
||||
//播放延迟
|
||||
private int delay;
|
||||
|
||||
//hint位置
|
||||
private int gravity;
|
||||
|
||||
//hint颜色
|
||||
private int color;
|
||||
|
||||
//hint透明度
|
||||
private int alpha;
|
||||
|
||||
private int paddingLeft;
|
||||
private int paddingTop;
|
||||
private int paddingRight;
|
||||
private int paddingBottom;
|
||||
|
||||
private View mHintView;
|
||||
private Timer timer;
|
||||
|
||||
private JPagerObserver jPagerObserver;
|
||||
|
||||
public interface HintViewDelegate {
|
||||
void setCurrentPosition(int position, HintView hintView);
|
||||
|
||||
void initView(int length, int gravity, HintView hintView);
|
||||
}
|
||||
|
||||
private HintViewDelegate mHintViewDelegate = new HintViewDelegate() {
|
||||
@Override
|
||||
public void setCurrentPosition(int position, HintView hintView) {
|
||||
if (hintView != null)
|
||||
hintView.setCurrent(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initView(int length, int gravity, HintView hintView) {
|
||||
if (hintView != null)
|
||||
hintView.initView(length, gravity);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public RollPagerView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public RollPagerView(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
|
||||
}
|
||||
|
||||
public RollPagerView(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
initView(attrs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取提示形式 和 提示位置 和 播放延迟
|
||||
*
|
||||
* @param attrs
|
||||
*/
|
||||
private void initView(AttributeSet attrs) {
|
||||
if (mViewPager != null) {
|
||||
removeView(mViewPager);
|
||||
}
|
||||
|
||||
TypedArray type = getContext().obtainStyledAttributes(attrs, R.styleable.RollViewPager);
|
||||
gravity = type.getInteger(R.styleable.RollViewPager_rollviewpager_hint_gravity, 1);
|
||||
delay = type.getInt(R.styleable.RollViewPager_rollviewpager_play_delay, 0);
|
||||
color = type.getColor(R.styleable.RollViewPager_rollviewpager_hint_color, Color.BLACK);
|
||||
alpha = type.getInt(R.styleable.RollViewPager_rollviewpager_hint_alpha, 0);
|
||||
paddingLeft = (int) type.getDimension(R.styleable.RollViewPager_rollviewpager_hint_paddingLeft, 0);
|
||||
paddingRight = (int) type.getDimension(R.styleable.RollViewPager_rollviewpager_hint_paddingRight, 0);
|
||||
paddingTop = (int) type.getDimension(R.styleable.RollViewPager_rollviewpager_hint_paddingTop, 0);
|
||||
paddingBottom = (int) type.getDimension(R.styleable.RollViewPager_rollviewpager_hint_paddingBottom, Util.dip2px(getContext(), 4));
|
||||
|
||||
mViewPager = new ViewPager(getContext());
|
||||
mViewPager.setId(R.id.viewpager_inner);
|
||||
mViewPager.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
||||
addView(mViewPager);
|
||||
type.recycle();
|
||||
initHint(new ColorPointHintView(getContext(), Color.parseColor("#E3AC42"), Color.parseColor("#88ffffff")));
|
||||
//手势处理
|
||||
mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
|
||||
@Override
|
||||
public boolean onSingleTapUp(MotionEvent e) {
|
||||
if (mOnItemClickListener != null) {
|
||||
if (mAdapter instanceof LoopPagerAdapter) {//原谅我写了这么丑的代码
|
||||
mOnItemClickListener.onItemClick(mViewPager.getCurrentItem() % ((LoopPagerAdapter) mAdapter).getRealCount());
|
||||
} else {
|
||||
mOnItemClickListener.onItemClick(mViewPager.getCurrentItem());
|
||||
}
|
||||
}
|
||||
return super.onSingleTapUp(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private final static class TimeTaskHandler extends Handler {
|
||||
private WeakReference<RollPagerView> mRollPagerViewWeakReference;
|
||||
|
||||
public TimeTaskHandler(RollPagerView rollPagerView) {
|
||||
this.mRollPagerViewWeakReference = new WeakReference<>(rollPagerView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
RollPagerView rollPagerView = mRollPagerViewWeakReference.get();
|
||||
if (rollPagerView == null) return;
|
||||
int cur = rollPagerView.getViewPager().getCurrentItem() + 1;
|
||||
if (cur >= rollPagerView.mAdapter.getCount()) {
|
||||
cur = 0;
|
||||
}
|
||||
rollPagerView.getViewPager().setCurrentItem(cur);
|
||||
rollPagerView.mHintViewDelegate.setCurrentPosition(cur, (HintView) rollPagerView.mHintView);
|
||||
if (rollPagerView.mAdapter.getCount() <= 1) rollPagerView.stopPlay();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private TimeTaskHandler mHandler = new TimeTaskHandler(this);
|
||||
|
||||
private static class WeakTimerTask extends TimerTask {
|
||||
private WeakReference<RollPagerView> mRollPagerViewWeakReference;
|
||||
|
||||
public WeakTimerTask(RollPagerView mRollPagerView) {
|
||||
this.mRollPagerViewWeakReference = new WeakReference<>(mRollPagerView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
RollPagerView rollPagerView = mRollPagerViewWeakReference.get();
|
||||
if (rollPagerView != null) {
|
||||
if (rollPagerView.isShown() && System.currentTimeMillis() - rollPagerView.mRecentTouchTime > rollPagerView.delay) {
|
||||
rollPagerView.mHandler.sendEmptyMessage(0);
|
||||
}
|
||||
} else {
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始播放
|
||||
* 仅当view正在显示 且 触摸等待时间过后 播放
|
||||
*/
|
||||
private void startPlay() {
|
||||
if (delay <= 0 || mAdapter == null || mAdapter.getCount() <= 1) {
|
||||
return;
|
||||
}
|
||||
if (timer != null) {
|
||||
timer.cancel();
|
||||
}
|
||||
timer = new Timer();
|
||||
//用一个timer定时设置当前项为下一项
|
||||
timer.schedule(new WeakTimerTask(this), delay, delay);
|
||||
}
|
||||
|
||||
private void stopPlay() {
|
||||
if (timer != null) {
|
||||
timer.cancel();
|
||||
timer = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setHintViewDelegate(HintViewDelegate delegate) {
|
||||
this.mHintViewDelegate = delegate;
|
||||
}
|
||||
|
||||
|
||||
private void initHint(HintView hintview) {
|
||||
if (mHintView != null) {
|
||||
removeView(mHintView);
|
||||
}
|
||||
|
||||
if (hintview == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mHintView = (View) hintview;
|
||||
loadHintView();
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载hintview的容器
|
||||
*/
|
||||
private void loadHintView() {
|
||||
addView(mHintView);
|
||||
mHintView.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
|
||||
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
|
||||
((View) mHintView).setLayoutParams(lp);
|
||||
|
||||
GradientDrawable gd = new GradientDrawable();
|
||||
gd.setColor(color);
|
||||
gd.setAlpha(alpha);
|
||||
mHintView.setBackgroundDrawable(gd);
|
||||
|
||||
mHintViewDelegate.initView(mAdapter == null ? 0 : mAdapter.getCount(), gravity, (HintView) mHintView);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设置viewager滑动动画持续时间
|
||||
*
|
||||
* @param during
|
||||
*/
|
||||
public void setAnimationDurtion(final int during) {
|
||||
try {
|
||||
// viePager平移动画事件
|
||||
Field mField = ViewPager.class.getDeclaredField("mScroller");
|
||||
mField.setAccessible(true);
|
||||
Scroller mScroller = new Scroller(getContext(),
|
||||
// 动画效果与ViewPager的一致
|
||||
new Interpolator() {
|
||||
public float getInterpolation(float t) {
|
||||
t -= 1.0f;
|
||||
return t * t * t * t * t + 1.0f;
|
||||
}
|
||||
}) {
|
||||
|
||||
@Override
|
||||
public void startScroll(int startX, int startY, int dx,
|
||||
int dy, int duration) {
|
||||
// 如果手工滚动,则加速滚动
|
||||
if (System.currentTimeMillis() - mRecentTouchTime > delay) {
|
||||
duration = during;
|
||||
} else {
|
||||
duration /= 2;
|
||||
}
|
||||
super.startScroll(startX, startY, dx, dy, duration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startScroll(int startX, int startY, int dx,
|
||||
int dy) {
|
||||
super.startScroll(startX, startY, dx, dy, during);
|
||||
}
|
||||
};
|
||||
mField.set(mViewPager, mScroller);
|
||||
} catch (NoSuchFieldException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalArgumentException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void setPlayDelay(int delay) {
|
||||
this.delay = delay;
|
||||
startPlay();
|
||||
}
|
||||
|
||||
|
||||
public void pause() {
|
||||
stopPlay();
|
||||
}
|
||||
|
||||
public void resume() {
|
||||
startPlay();
|
||||
}
|
||||
|
||||
public boolean isPlaying() {
|
||||
return timer != null;
|
||||
}
|
||||
|
||||
|
||||
public void setOnItemClickListener(OnItemClickListener listener) {
|
||||
this.mOnItemClickListener = listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置提示view的位置
|
||||
*/
|
||||
public void setHintPadding(int left, int top, int right, int bottom) {
|
||||
paddingLeft = left;
|
||||
paddingTop = top;
|
||||
paddingRight = right;
|
||||
paddingBottom = bottom;
|
||||
mHintView.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置提示view的透明度
|
||||
*
|
||||
* @param alpha 0为全透明 255为实心
|
||||
*/
|
||||
public void setHintAlpha(int alpha) {
|
||||
this.alpha = alpha;
|
||||
initHint((HintView) mHintView);
|
||||
}
|
||||
|
||||
/**
|
||||
* 支持自定义hintview
|
||||
* 只需new一个实现HintView的View传进来
|
||||
* 会自动将你的view添加到本View里面。重新设置LayoutParams。
|
||||
*
|
||||
* @param hintview
|
||||
*/
|
||||
public void setHintView(HintView hintview) {
|
||||
|
||||
if (mHintView != null) {
|
||||
removeView(mHintView);
|
||||
}
|
||||
this.mHintView = (View) hintview;
|
||||
if (hintview != null && hintview instanceof View) {
|
||||
initHint(hintview);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 取真正的Viewpager
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public ViewPager getViewPager() {
|
||||
return mViewPager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置Adapter
|
||||
*
|
||||
* @param adapter
|
||||
*/
|
||||
public void setAdapter(PagerAdapter adapter) {
|
||||
if (mAdapter != null && jPagerObserver != null) {
|
||||
mAdapter.unregisterDataSetObserver(jPagerObserver);
|
||||
stopPlay();
|
||||
}
|
||||
adapter.registerDataSetObserver(jPagerObserver = new JPagerObserver());
|
||||
mViewPager.setAdapter(adapter);
|
||||
mViewPager.clearOnPageChangeListeners();
|
||||
mViewPager.addOnPageChangeListener(this);
|
||||
mAdapter = adapter;
|
||||
dataSetChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
* 用来实现adapter的notifyDataSetChanged通知HintView变化
|
||||
*/
|
||||
private class JPagerObserver extends DataSetObserver {
|
||||
@Override
|
||||
public void onChanged() {
|
||||
dataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInvalidated() {
|
||||
dataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void dataSetChanged() {
|
||||
if (mHintView != null) {
|
||||
mHintViewDelegate.initView(mAdapter.getCount(), gravity, (HintView) mHintView);
|
||||
mHintViewDelegate.setCurrentPosition(mViewPager.getCurrentItem(), (HintView) mHintView);
|
||||
}
|
||||
startPlay();
|
||||
}
|
||||
|
||||
/**
|
||||
* 为了实现触摸时和过后一定时间内不滑动,这里拦截
|
||||
*
|
||||
* @param ev
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||
mRecentTouchTime = System.currentTimeMillis();
|
||||
mGestureDetector.onTouchEvent(ev);
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int arg0) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int arg0, float arg1, int arg2) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int arg0) {
|
||||
mHintViewDelegate.setCurrentPosition(arg0, (HintView) mHintView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onInterceptTouchEvent(MotionEvent ev) {
|
||||
if (getChildCount() == 0 && getViewPager().getCurrentItem() == 0) {
|
||||
return false;
|
||||
}
|
||||
return super.onInterceptTouchEvent(ev);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public class Util {
|
||||
/**
|
||||
* dpתpx
|
||||
*
|
||||
*/
|
||||
public static int dip2px(Context ctx,float dpValue) {
|
||||
final float scale = ctx.getResources().getDisplayMetrics().density;
|
||||
return (int) (dpValue * scale + 0.5f);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* pxתdp
|
||||
*/
|
||||
public static int px2dip(Context ctx,float pxValue) {
|
||||
final float scale = ctx.getResources().getDisplayMetrics().density;
|
||||
return (int) (pxValue / scale + 0.5f);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager.adapter;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.fragment.app.FragmentPagerAdapter;
|
||||
import androidx.viewpager.widget.PagerAdapter;
|
||||
|
||||
|
||||
/**
|
||||
* 动态管理的Adapter。概念参照{@link FragmentPagerAdapter}
|
||||
* 每次都会创建新view,销毁旧View。节省内存消耗性能
|
||||
*
|
||||
* <p>Subclasses only need to implement {@link #getView(ViewGroup,int)}
|
||||
* and {@link #getCount()} to have a working adapter.
|
||||
*
|
||||
*/
|
||||
public abstract class DynamicPagerAdapter extends PagerAdapter {
|
||||
|
||||
@Override
|
||||
public boolean isViewFromObject(View arg0, Object arg1) {
|
||||
return arg0==arg1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyItem(ViewGroup container, int position, Object object) {
|
||||
container.removeView((View) object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemPosition(Object object) {
|
||||
return super.getItemPosition(object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object instantiateItem(ViewGroup container, int position) {
|
||||
View itemView = getView(container,position);
|
||||
container.addView(itemView);
|
||||
return itemView;
|
||||
}
|
||||
public abstract View getView(ViewGroup container, int position);
|
||||
|
||||
}
|
@@ -0,0 +1,122 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager.adapter;
|
||||
|
||||
import android.database.DataSetObserver;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.viewpager.widget.PagerAdapter;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.HintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Mr.Jude on 2016/1/9.
|
||||
*/
|
||||
public abstract class LoopPagerAdapter extends PagerAdapter {
|
||||
private RollPagerView mViewPager;
|
||||
|
||||
private ArrayList<View> mViewList = new ArrayList<>();
|
||||
|
||||
private class LoopHintViewDelegate implements RollPagerView.HintViewDelegate{
|
||||
@Override
|
||||
public void setCurrentPosition(int position, HintView hintView) {
|
||||
if (hintView!=null&&getRealCount()>0)
|
||||
hintView.setCurrent(position%getRealCount());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initView(int length, int gravity, HintView hintView) {
|
||||
if (hintView!=null)
|
||||
hintView.initView(getRealCount(),gravity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDataSetChanged() {
|
||||
mViewList.clear();
|
||||
initPosition();
|
||||
super.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemPosition(Object object) {
|
||||
return POSITION_NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerDataSetObserver(DataSetObserver observer) {
|
||||
super.registerDataSetObserver(observer);
|
||||
initPosition();
|
||||
}
|
||||
|
||||
private void initPosition(){
|
||||
if (mViewPager.getViewPager().getCurrentItem() == 0&&getRealCount()>0){
|
||||
int half = Integer.MAX_VALUE/2;
|
||||
int start = half - half%getRealCount();
|
||||
setCurrent(start);
|
||||
}
|
||||
}
|
||||
|
||||
private void setCurrent(int index){
|
||||
try {
|
||||
Field field = ViewPager.class.getDeclaredField("mCurItem");
|
||||
field.setAccessible(true);
|
||||
field.set(mViewPager.getViewPager(),index);
|
||||
} catch (NoSuchFieldException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public LoopPagerAdapter(RollPagerView viewPager){
|
||||
this.mViewPager = viewPager;
|
||||
viewPager.setHintViewDelegate(new LoopHintViewDelegate());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isViewFromObject(View arg0, Object arg1) {
|
||||
return arg0==arg1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyItem(ViewGroup container, int position, Object object) {
|
||||
container.removeView((View) object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object instantiateItem(ViewGroup container, int position) {
|
||||
int realPosition = position%getRealCount();
|
||||
View itemView = findViewByPosition(container,realPosition);
|
||||
container.addView(itemView);
|
||||
return itemView;
|
||||
}
|
||||
|
||||
|
||||
private View findViewByPosition(ViewGroup container,int position){
|
||||
for (View view : mViewList) {
|
||||
if (((int)view.getTag()) == position&&view.getParent()==null){
|
||||
return view;
|
||||
}
|
||||
}
|
||||
View view = getView(container,position);
|
||||
view.setTag(position);
|
||||
mViewList.add(view);
|
||||
return view;
|
||||
}
|
||||
|
||||
public abstract View getView(ViewGroup container, int position);
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public final int getCount() {
|
||||
return getRealCount()<=0?getRealCount():Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
public abstract int getRealCount();
|
||||
}
|
@@ -0,0 +1,70 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager.adapter;
|
||||
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||
import androidx.viewpager.widget.PagerAdapter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/**
|
||||
* 静态存储的Adapter。概念参照{@link FragmentStatePagerAdapter}
|
||||
* view添加进去就不管了,View长在,内存不再。
|
||||
* <p>Subclasses only need to implement {@link #getView(ViewGroup,int)}
|
||||
* and {@link #getCount()} to have a working adapter.
|
||||
*
|
||||
*/
|
||||
public abstract class StaticPagerAdapter extends PagerAdapter {
|
||||
private ArrayList<View> mViewList = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public boolean isViewFromObject(View arg0, Object arg1) {
|
||||
return arg0==arg1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyItem(ViewGroup container, int position, Object object) {
|
||||
container.removeView((View) object);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDataSetChanged() {
|
||||
mViewList.clear();
|
||||
super.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemPosition(Object object) {
|
||||
return POSITION_NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object instantiateItem(ViewGroup container, int position) {
|
||||
View itemView = findViewByPosition(container,position);
|
||||
container.addView(itemView);
|
||||
onBind(itemView,position);
|
||||
return itemView;
|
||||
}
|
||||
|
||||
private View findViewByPosition(ViewGroup container,int position){
|
||||
for (View view : mViewList) {
|
||||
if (((int)view.getTag()) == position&&view.getParent()==null){
|
||||
return view;
|
||||
}
|
||||
}
|
||||
View view = getView(container,position);
|
||||
view.setTag(position);
|
||||
mViewList.add(view);
|
||||
return view;
|
||||
}
|
||||
|
||||
|
||||
public void onBind(View view,int position){
|
||||
}
|
||||
|
||||
public abstract View getView(ViewGroup container, int position);
|
||||
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager.hintview;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.GradientDrawable;
|
||||
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Mr.Jude on 2016/1/10.
|
||||
*/
|
||||
public class ColorPointHintView extends ShapeHintView {
|
||||
private int focusColor;
|
||||
private int normalColor;
|
||||
|
||||
public ColorPointHintView(Context context,int focusColor,int normalColor) {
|
||||
super(context);
|
||||
this.focusColor = focusColor;
|
||||
this.normalColor = normalColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable makeFocusDrawable() {
|
||||
GradientDrawable dot_focus = new GradientDrawable();
|
||||
dot_focus.setColor(focusColor);
|
||||
dot_focus.setCornerRadius(Util.dip2px(getContext(), 4));
|
||||
dot_focus.setSize(Util.dip2px(getContext(), 8), Util.dip2px(getContext(), 8));
|
||||
return dot_focus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable makeNormalDrawable() {
|
||||
GradientDrawable dot_normal = new GradientDrawable();
|
||||
dot_normal.setColor(normalColor);
|
||||
dot_normal.setCornerRadius(Util.dip2px(getContext(), 4));
|
||||
dot_normal.setSize(Util.dip2px(getContext(), 8), Util.dip2px(getContext(), 8));
|
||||
return dot_normal;
|
||||
}
|
||||
}
|
@@ -0,0 +1,78 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager.hintview;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Mr.Jude on 2016/1/10.
|
||||
*/
|
||||
public class IconHintView extends ShapeHintView {
|
||||
private int focusResId;
|
||||
private int normalResId;
|
||||
private int size;
|
||||
|
||||
|
||||
public IconHintView(Context context, @DrawableRes int focusResId, @DrawableRes int normalResId) {
|
||||
this(context, focusResId, normalResId, Util.dip2px(context,32));
|
||||
}
|
||||
|
||||
public IconHintView(Context context, @DrawableRes int focusResId, @DrawableRes int normalResId, int size) {
|
||||
super(context);
|
||||
this.focusResId = focusResId;
|
||||
this.normalResId = normalResId;
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable makeFocusDrawable() {
|
||||
Drawable drawable = getContext().getResources().getDrawable(focusResId);
|
||||
if (size>0){
|
||||
drawable = zoomDrawable(drawable,size,size);
|
||||
}
|
||||
return drawable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable makeNormalDrawable() {
|
||||
Drawable drawable = getContext().getResources().getDrawable(normalResId);
|
||||
if (size>0){
|
||||
drawable = zoomDrawable(drawable,size,size);
|
||||
}
|
||||
return drawable;
|
||||
}
|
||||
|
||||
private Drawable zoomDrawable(Drawable drawable, int w, int h) {
|
||||
int width = drawable.getIntrinsicWidth();
|
||||
int height = drawable.getIntrinsicHeight();
|
||||
Bitmap oldbmp = drawableToBitmap(drawable);
|
||||
Matrix matrix = new Matrix();
|
||||
float scaleWidth = ((float) w / width);
|
||||
float scaleHeight = ((float) h / height);
|
||||
matrix.postScale(scaleWidth, scaleHeight);
|
||||
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,
|
||||
matrix, true);
|
||||
return new BitmapDrawable(null, newbmp);
|
||||
}
|
||||
|
||||
private Bitmap drawableToBitmap(Drawable drawable) {
|
||||
int width = drawable.getIntrinsicWidth();
|
||||
int height = drawable.getIntrinsicHeight();
|
||||
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
|
||||
: Bitmap.Config.RGB_565;
|
||||
Bitmap bitmap = Bitmap.createBitmap(width, height, config);
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
drawable.setBounds(0, 0, width, height);
|
||||
drawable.draw(canvas);
|
||||
return bitmap;
|
||||
}
|
||||
}
|
@@ -0,0 +1,80 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager.hintview;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.Gravity;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.HintView;
|
||||
|
||||
|
||||
public abstract class ShapeHintView extends LinearLayout implements HintView {
|
||||
private ImageView[] mDots;
|
||||
private int length = 0;
|
||||
private int lastPosition = 0;
|
||||
|
||||
private Drawable dot_normal;
|
||||
private Drawable dot_focus;
|
||||
|
||||
public ShapeHintView(Context context){
|
||||
super(context);
|
||||
}
|
||||
|
||||
public ShapeHintView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
|
||||
public abstract Drawable makeFocusDrawable();
|
||||
|
||||
public abstract Drawable makeNormalDrawable();
|
||||
|
||||
@Override
|
||||
public void initView(int length, int gravity) {
|
||||
removeAllViews();
|
||||
lastPosition = 0;
|
||||
setOrientation(HORIZONTAL);
|
||||
switch (gravity) {
|
||||
case 0:
|
||||
setGravity(Gravity.LEFT| Gravity.CENTER_VERTICAL);
|
||||
break;
|
||||
case 1:
|
||||
setGravity(Gravity.CENTER);
|
||||
break;
|
||||
case 2:
|
||||
setGravity(Gravity.RIGHT| Gravity.CENTER_VERTICAL);
|
||||
break;
|
||||
}
|
||||
|
||||
this.length = length;
|
||||
mDots = new ImageView[length];
|
||||
|
||||
dot_focus = makeFocusDrawable();
|
||||
dot_normal = makeNormalDrawable();
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
mDots[i]=new ImageView(getContext());
|
||||
LayoutParams dotlp = new LayoutParams(
|
||||
LayoutParams.WRAP_CONTENT,
|
||||
LayoutParams.WRAP_CONTENT);
|
||||
dotlp.setMargins(10, 0, 10, 0);
|
||||
mDots[i].setLayoutParams(dotlp);
|
||||
mDots[i].setBackgroundDrawable(dot_normal);
|
||||
addView(mDots[i]);
|
||||
}
|
||||
|
||||
setCurrent(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCurrent(int current) {
|
||||
if (current < 0 || current > length - 1) {
|
||||
return;
|
||||
}
|
||||
mDots[lastPosition].setBackgroundDrawable(dot_normal);
|
||||
mDots[current].setBackgroundDrawable(dot_focus);
|
||||
lastPosition = current;
|
||||
}
|
||||
}
|
@@ -0,0 +1,47 @@
|
||||
package com.yizhuan.erban.ui.widget.rollviewpager.hintview;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.Gravity;
|
||||
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.HintView;
|
||||
|
||||
|
||||
public class TextHintView extends AppCompatTextView implements HintView {
|
||||
private int length;
|
||||
|
||||
public TextHintView(Context context){
|
||||
super(context);
|
||||
}
|
||||
|
||||
public TextHintView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initView(int length, int gravity) {
|
||||
this.length = length;
|
||||
setTextColor(Color.WHITE);
|
||||
switch (gravity) {
|
||||
case 0:
|
||||
setGravity(Gravity.LEFT| Gravity.CENTER_VERTICAL);
|
||||
break;
|
||||
case 1:
|
||||
setGravity(Gravity.CENTER);
|
||||
break;
|
||||
case 2:
|
||||
setGravity(Gravity.RIGHT| Gravity.CENTER_VERTICAL);
|
||||
break;
|
||||
}
|
||||
|
||||
setCurrent(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCurrent(int current) {
|
||||
setText(current+1+"/"+ length);
|
||||
}
|
||||
}
|
@@ -47,7 +47,7 @@
|
||||
android:layout_below="@+id/toolbar"
|
||||
>
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/roll_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="80dp"
|
||||
|
@@ -34,7 +34,7 @@
|
||||
android:layout_height="250dp"
|
||||
app:edge_position="bottom">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/roll_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="250dp"
|
||||
|
@@ -40,7 +40,7 @@
|
||||
android:layout_marginBottom="10dp"
|
||||
app:hw_ratio="0.3462">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/rpv_family_plaza"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
@@ -24,7 +24,7 @@
|
||||
android:background="#FAFAFA"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/roll_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="120dp"
|
||||
|
@@ -132,7 +132,7 @@
|
||||
android:layout_marginEnd="@dimen/dp_15"
|
||||
android:layout_marginBottom="5dp">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/roll_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
|
@@ -8,7 +8,7 @@
|
||||
android:paddingTop="10dp"
|
||||
android:paddingBottom="10dp">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/roll_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="120dp"
|
||||
|
@@ -11,7 +11,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/roll_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="120dp"
|
||||
|
@@ -14,7 +14,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
app:hw_ratio="0.28">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/rpv_other_banner"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
@@ -348,4 +348,24 @@
|
||||
<attr name="edge_width" format="dimension" />
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="RollViewPager">
|
||||
<attr name="rollviewpager_hint_mode">
|
||||
<enum name="point" value="0" />
|
||||
<enum name="number" value="1" />
|
||||
</attr>
|
||||
<attr name="rollviewpager_hint_gravity">
|
||||
<enum name="left" value="0" />
|
||||
<enum name="center" value="1" />
|
||||
<enum name="right" value="2" />
|
||||
</attr>
|
||||
<attr name="rollviewpager_hint_paddingRight" format="dimension"/>
|
||||
<attr name="rollviewpager_hint_paddingLeft" format="dimension"/>
|
||||
<attr name="rollviewpager_hint_paddingTop" format="dimension"/>
|
||||
<attr name="rollviewpager_hint_paddingBottom" format="dimension"/>
|
||||
|
||||
<attr name="rollviewpager_play_delay" format="integer" />
|
||||
<attr name="rollviewpager_hint_color" format="color" />
|
||||
<attr name="rollviewpager_hint_alpha" format="integer" />
|
||||
</declare-styleable>
|
||||
|
||||
</resources>
|
||||
|
@@ -24,4 +24,5 @@
|
||||
<item name="day_picker_selected_date_layout" type="id"/>
|
||||
<item name="done" type="id"/>
|
||||
<item name="month_text_view" type="id"/>
|
||||
<item name="viewpager_inner" type="id"/>
|
||||
</resources>
|
@@ -15,9 +15,9 @@ import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.jude.rollviewpager.RollPagerView;
|
||||
import com.jude.rollviewpager.Util;
|
||||
import com.jude.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.Util;
|
||||
import com.yizhuan.erban.ui.widget.rollviewpager.hintview.ColorPointHintView;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
import com.yizhuan.erban.R;
|
||||
import com.yizhuan.erban.base.BaseMvpActivity;
|
||||
|
@@ -159,7 +159,7 @@
|
||||
android:layout_alignTop="@+id/message_view"
|
||||
android:layout="@layout/room_mentoring_count_down_timer_view_stub_layout" />
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/activity_img"
|
||||
android:layout_width="65dp"
|
||||
android:layout_height="70dp"
|
||||
@@ -191,7 +191,7 @@
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/activity_img_left_cp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -263,7 +263,7 @@
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
android:id="@+id/activity_img_left"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
@@ -6,7 +6,7 @@
|
||||
android:paddingTop="20dp"
|
||||
android:paddingBottom="20dp">
|
||||
|
||||
<com.jude.rollviewpager.RollPagerView
|
||||
<com.yizhuan.erban.ui.widget.rollviewpager.RollPagerView
|
||||
|
||||
android:id="@+id/roll_view"
|
||||
android:layout_width="match_parent"
|
||||
|
Reference in New Issue
Block a user