package com.wanyue.common.custom;
import android.content.Context;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import androidx.core.os.ParcelableCompat;
import androidx.core.os.ParcelableCompatCreatorCallbacks;
import androidx.core.view.AccessibilityDelegateCompat;
import androidx.core.view.MotionEventCompat;
import androidx.viewpager.widget.PagerAdapter;
import androidx.core.view.VelocityTrackerCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.ViewConfigurationCompat;
import androidx.viewpager.widget.ViewPager;
import androidx.core.view.accessibility.AccessibilityEventCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.core.view.accessibility.AccessibilityRecordCompat;
import androidx.core.widget.EdgeEffectCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.FocusFinder;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SoundEffectConstants;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.Interpolator;
import android.widget.Scroller;
import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/**
* 垂直ViewPager
*/
public class VerticalViewPager extends ViewGroup {
private static final String TAG = "ViewPager";
private static final boolean DEBUG = false;
private static final boolean USE_CACHE = false;
private static final int DEFAULT_OFFSCREEN_PAGES = 1;
private static final int MAX_SETTLE_DURATION = 600; // ms
private static final int MIN_DISTANCE_FOR_FLING = 25; // dips
private static final int DEFAULT_GUTTER_SIZE = 16; // dips
private static final int MIN_FLING_VELOCITY = 400; // dips
private static final int[] LAYOUT_ATTRS = new int[]{
android.R.attr.layout_gravity
};
/**
* Used to track what the expected number of items in the adapter should be.
* If the app changes this when we don't expect it, we'll throw a big obnoxious exception.
*/
private int mExpectedAdapterCount;
static class ItemInfo {
Object object;
int position;
boolean scrolling;
float heightFactor;
float offset;
}
private static final Comparator<ItemInfo> COMPARATOR = new Comparator<ItemInfo>() {
@Override
public int compare(ItemInfo lhs, ItemInfo rhs) {
return lhs.position - rhs.position;
}
};
private static final Interpolator sInterpolator = new Interpolator() {
public float getInterpolation(float t) {
t -= 1.0f;
return t * t * t * t * t + 1.0f;
}
};
private final ArrayList<ItemInfo> mItems = new ArrayList<ItemInfo>();
private final ItemInfo mTempItem = new ItemInfo();
private final Rect mTempRect = new Rect();
private PagerAdapter mAdapter;
private int mCurItem; // Index of currently displayed page.
private int mRestoredCurItem = -1;
private Parcelable mRestoredAdapterState = null;
private ClassLoader mRestoredClassLoader = null;
private Scroller mScroller;
private PagerObserver mObserver;
private int mPageMargin;
private Drawable mMarginDrawable;
private int mLeftPageBounds;
private int mRightPageBounds;
// Offsets of the first and last items, if known.
// Set during population, used to determine if we are at the beginning
// or end of the pager data set during touch scrolling.
private float mFirstOffset = -Float.MAX_VALUE;
private float mLastOffset = Float.MAX_VALUE;
private int mChildWidthMeasureSpec;
private int mChildHeightMeasureSpec;
private boolean mInLayout;
private boolean mScrollingCacheEnabled;
private boolean mPopulatePending;
private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES;
private boolean mIsBeingDragged;
private boolean mIsUnableToDrag;
private boolean mIgnoreGutter;
private int mDefaultGutterSize;
private int mGutterSize;
private int mTouchSlop;
/**
* Position of the last motion event.
*/
private float mLastMotionX;
private float mLastMotionY;
private float mInitialMotionX;
private float mInitialMotionY;
/**
* ID of the active pointer. This is used to retain consistency during
* drags/flings if multiple pointers are used.
*/
private int mActivePointerId = INVALID_POINTER;
/**
* Sentinel value for no current active pointer.
* Used by {@link #mActivePointerId}.
*/
private static final int INVALID_POINTER = -1;
/**
* Determines speed during touch scrolling
*/
private VelocityTracker mVelocityTracker;
private int mMinimumVelocity;
private int mMaximumVelocity;
private int mFlingDistance;
private int mCloseEnough;
// If the pager is at least this close to its final position, complete the scroll
// on touch down and let the user interact with the content inside instead of
// "catching" the flinging pager.
private static final int CLOSE_ENOUGH = 2; // dp
private boolean mFakeDragging;
private long mFakeDragBeginTime;
private EdgeEffectCompat mTopEdge;
private EdgeEffectCompat mBottomEdge;
private boolean mFirstLayout = true;
private boolean mNeedCalculatePageOffsets = false;
private boolean mCalledSuper;
private int mDecorChildCount;
private ViewPager.OnPageChangeListener mOnPageChangeListener;
private ViewPager.OnPageChangeListener mInternalPageChangeListener;
private OnAdapterChangeListener mAdapterChangeListener;
private ViewPager.PageTransformer mPageTransformer;
private Method mSetChildrenDrawingOrderEnabled;
private static final int DRAW_ORDER_DEFAULT = 0;
private static final int DRAW_ORDER_FORWARD = 1;
private static final int DRAW_ORDER_REVERSE = 2;
private int mDrawingOrder;
private ArrayList<View> mDrawingOrderedChildren;
private static final ViewPositionComparator sPositionComparator = new ViewPositionComparator();
/**
* Indicates that the pager is in an idle, settled state. The current page
* is fully in view and no animation is in progress.
*/
public static final int SCROLL_STATE_IDLE = 0;
/**
* Indicates that the pager is currently being dragged by the user.
*/
public static final int SCROLL_STATE_DRAGGING = 1;
/**
* Indicates that the pager is in the process of settling to a final position.
*/
public static final int SCROLL_STATE_SETTLING = 2;
private final Runnable mEndScrollRunnable = new Runnable() {
public void run() {
setScrollState(SCROLL_STATE_IDLE);
populate();
}
};
private int mScrollState = SCROLL_STATE_IDLE;
/**
* Used internally to monitor when adapters are switched.
*/
interface OnAdapterChangeListener {
public void onAdapterChanged(PagerAdapter oldAdapter, PagerAdapter newAdapter);
}
/**
* Used internally to tag special types of child views that should be added as
* pager decorations by default.
*/
interface Decor {
}
public VerticalViewPager(Context context) {
super(context);
initViewPager();
}
public VerticalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
initViewPager();
}
void initVie
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
支持定制或二次开发,可全球搭建部署。 功能模块:直播授课、文字互动、课件展示、语音互动、教学白板、屏幕共享 功能模块:直播授课、教学白板、屏幕共享、连麦互动、随堂测验、在线抢答 功能模块:直播授课、课件共享、连麦互动、教学白板、课堂练习、屏幕共享 功能模块:视频课程、图文课程、直播课程、语音课程、组合销售 1、高并发优化 提供高并发、大数据解决方案,支持数据库读写分离和集群化部署。 2、安全可靠 数据加密,内容云端存储,防盗防录屏,IP访问监控,全方位保护课程版权。 3、多终端支持 支持Web、Android、iOS、ipad等多个终端切换。 4、注重体验 高清视频直播授课,码率自适应,播放超低延迟,互动连麦流畅不失真。
资源推荐
资源详情
资源评论
收起资源包目录
Android在线教育app源码 (1257个子文件)
gradlew.bat 2KB
jarAnalysis.bin 77.65MB
executionHistory.bin 33.06MB
classAnalysis.bin 24.91MB
fileHashes.bin 2.7MB
taskHistory.bin 554KB
outputFiles.bin 512KB
resourceHashesCache.bin 201KB
last-build.bin 1B
.DS_Store 8KB
.DS_Store 8KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.gitignore 222B
.gitignore 8B
.gitignore 8B
.gitignore 8B
.gitignore 8B
.gitignore 7B
.gitignore 7B
build.gradle 4KB
config.gradle 3KB
build.gradle 2KB
build.gradle 2KB
build.gradle 2KB
build.gradle 1KB
build.gradle 1KB
build.gradle 912B
settings.gradle 96B
gradlew 5KB
app.iml 22KB
detail.iml 22KB
main.iml 21KB
inside.iml 21KB
common.iml 20KB
mob.iml 13KB
Education.iml 940B
MobTools-2018.1128.1916.jar 383KB
alipaySdk-20180601.jar 304KB
TencentLocationSdk_v6.2.5.3.jar 286KB
AndroidPicker-1.5.6.jar 216KB
TencentMapSDK_1.2.8.1.jar 216KB
MobCommons-2018.1128.1916.jar 167KB
ShareSDK-Core-3.4.0.jar 120KB
commons-io-1.4.jar 106KB
gradle-wrapper.jar 53KB
SDKWrapper-2018.0801.1824.jar 50KB
ShareSDK-Wechat-Core-3.4.0.jar 44KB
ShareSDK-QQ-3.4.0.jar 39KB
ShareSDK-Facebook-3.4.0.jar 35KB
ShareSDK-QZone-3.4.0.jar 34KB
ShareSDK-Twitter-3.4.0.jar 24KB
ShareSDK-Wechat-3.4.0.jar 6KB
ShareSDK-Wechat-Moments-3.4.0.jar 6KB
ShareSDK-Wechat-Favorite-3.4.0.jar 6KB
VerticalViewPager.java 107KB
ZoomView.java 50KB
ZoomImageView.java 33KB
ItemDecoration.java 26KB
DialogUitl.java 23KB
MaterialProgressDrawable.java 22KB
RxRefreshView.java 20KB
ProgressPieView.java 19KB
CommonAppConfig.java 19KB
GiftAnimViewHolder.java 18KB
SpannableStringUtils.java 16KB
HomePageViewProxy.java 16KB
CommonAPI.java 14KB
OnekeyShareThemeImpl.java 14KB
CommonRefreshView.java 14KB
AnimationBuilder.java 14KB
MaterialHeader.java 13KB
StringUtil.java 13KB
BaseViewProxy.java 12KB
ConfigBean.java 11KB
ItemSlideHelper.java 11KB
BaseProxyMannger.java 10KB
ShadowContainer.java 10KB
UserBean.java 10KB
UIFactory.java 10KB
WebViewActivity.java 10KB
MainAPI.java 10KB
ProcessImageUtil.java 10KB
EditPageLand.java 10KB
ProjectBean.java 9KB
EditPagePort.java 9KB
OnekeyShare.java 9KB
Constants.java 9KB
FriendAdapter.java 9KB
WarpLinearLayout.java 9KB
ViewPagerSnapHelper.java 8KB
GooglePayTask.java 8KB
AliPayBuilder.java 8KB
BitmapUtil.java 8KB
LoginActivity.java 8KB
AbsActivity.java 8KB
PayPresenter.java 8KB
共 1257 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13
办公模板库素材蛙
- 粉丝: 1499
- 资源: 2262
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页