app直播原始碼,下拉檢視圖文詳情效果
app直播原始碼,下拉檢視圖文詳情效果
package com.example.administrator.permissiondemo.activity; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.Scroller; /** * Created by baoyunlong on 16/6/8. */ public class PullUpToLoadMore extends ViewGroup { private ScrollViewListener scrollViewListener = null; public void setOnScrollListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if (scrollViewListener != null) { if (oldy < y) {// 手指向上滑動,螢幕內容下滑 scrollViewListener.onScroll(oldy, y, false); } else if (oldy > y) {// 手指向下滑動,螢幕內容上滑 scrollViewListener.onScroll(oldy, y, true); } } } public interface ScrollViewListener {//dy Y軸滑動距離,isUp 是否返回頂部 void onScroll(int oldy, int dy, boolean isUp); } public static String TAG = PullUpToLoadMore.class.getName(); MyScrollView topScrollView, bottomScrollView; VelocityTracker velocityTracker = VelocityTracker.obtain(); Scroller scroller = new Scroller(getContext()); int currPosition = 0; int position1Y; int lastY; public int scaledTouchSlop;//最小滑動距離 int speed = 200; boolean isIntercept; public boolean bottomScrollVIewIsInTop = false; public boolean topScrollViewIsBottom = false; public PullUpToLoadMore(Context context) { super(context); init(); } public PullUpToLoadMore(Context context, AttributeSet attrs) { super(context, attrs); init(); } public PullUpToLoadMore(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { post(new Runnable() { @Override public void run() { topScrollView = (MyScrollView) getChildAt(0); bottomScrollView = (MyScrollView) getChildAt(1); topScrollView.setScrollListener(new MyScrollView.ScrollListener() { @Override public void onScrollToBottom() { topScrollViewIsBottom = true; } @Override public void onScrollToTop() { } @Override public void onScroll(int scrollY) { } @Override public void notBottom() { topScrollViewIsBottom = false; } }); bottomScrollView.setScrollListener(new MyScrollView.ScrollListener() { @Override public void onScrollToBottom() { } @Override public void onScrollToTop() { } @Override public void onScroll(int scrollY) { if (scrollY == 0) { bottomScrollVIewIsInTop = true; } else { bottomScrollVIewIsInTop = false; } } @Override public void notBottom() { } }); position1Y = topScrollView.getBottom(); scaledTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); } }); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { //防止子View禁止父view攔截事件 this.requestDisallowInterceptTouchEvent(false); return super.dispatchTouchEvent(ev); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { int y = (int) ev.getY(); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: lastY = y; break; case MotionEvent.ACTION_MOVE: //判斷是否已經滾動到了底部 if (topScrollViewIsBottom) { int dy = lastY - y; //判斷是否是向上滑動和是否在第一屏 if (dy > 0 && currPosition == 0) { if (dy >= scaledTouchSlop) { isIntercept = true;//攔截事件 lastY = y; } } } if (bottomScrollVIewIsInTop) { int dy = lastY - y; //判斷是否是向下滑動和是否在第二屏 if (dy < 0 && currPosition == 1) { if (Math.abs(dy) >= scaledTouchSlop) { isIntercept = true; } } } break; } return isIntercept; } @Override public boolean onTouchEvent(MotionEvent event) { int y = (int) event.getY(); velocityTracker.addMovement(event); switch (event.getAction()) { case MotionEvent.ACTION_MOVE: int dy = lastY - y; if (getScrollY() + dy < 0) { dy = getScrollY() + dy + Math.abs(getScrollY() + dy); } if (getScrollY() + dy + getHeight() > bottomScrollView.getBottom()) { dy = dy - (getScrollY() + dy - (bottomScrollView.getBottom() - getHeight())); } scrollBy(0, dy); break; case MotionEvent.ACTION_UP: isIntercept = false; velocityTracker.computeCurrentVelocity(1000); float yVelocity = velocityTracker.getYVelocity(); if (currPosition == 0) { if (yVelocity < 0 && yVelocity < -speed) { smoothScroll(position1Y); currPosition = 1; } else { smoothScroll(0); } } else { if (yVelocity > 0 && yVelocity > speed) { smoothScroll(0); currPosition = 0; } else { smoothScroll(position1Y); } } break; } lastY = y; return true; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); measureChildren(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childCount = getChildCount(); int childTop = 0; for (int i = 0; i < childCount; i++) { View child = getChildAt(i); child.layout(l, childTop, r, childTop + child.getMeasuredHeight()); childTop += child.getMeasuredHeight(); } } //透過Scroller實現彈性滑動 private void smoothScroll(int tartY) { int dy = tartY - getScrollY(); scroller.startScroll(getScrollX(), getScrollY(), 0, dy); invalidate(); } //滾動到頂部 public void scrollToTop() { smoothScroll(0); currPosition = 0; topScrollView.smoothScrollTo(0, 0); } @Override public void computeScroll() { if (scroller.computeScrollOffset()) { scrollTo(scroller.getCurrX(), scroller.getCurrY()); postInvalidate(); } } }
以上就是 app直播原始碼,下拉檢視圖文詳情效果,更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2985326/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- app直播原始碼,為文字/圖片新增按壓效果APP原始碼
- 直播app系統原始碼,對視訊新增擦拭去除效果APP原始碼
- 直播app系統原始碼,圖片Loading旋轉動畫效果APP原始碼動畫
- 視訊直播app原始碼,使用者下拉重新整理時,出現不同內容的情況才重新整理APP原始碼
- 短視訊app原始碼,點選檢視圖片,雙指放大APP原始碼
- 直播系統app原始碼,滑塊效果、slider用法APP原始碼IDE
- 短視訊app原始碼,實現原生js圖片預覽效果APP原始碼JS
- 短視訊直播原始碼,拖動滑塊實現圖片驗證效果原始碼
- 視訊直播app原始碼,點選圖片放大再點選縮小APP原始碼
- 線上直播原始碼,Dialog使用詳情(中間彈框)原始碼
- Linux檢視埠詳情Linux
- 直播app原始碼,js圖片下載方式集合APP原始碼JS
- 直播app原始碼,HTML + jQuery 實現輪播圖APP原始碼HTMLjQuery
- 視訊直播app原始碼,Android RecyclerView 列表載入圖片寬高適配APP原始碼AndroidView
- 直播帶貨商城功能詳解布穀直播APP原始碼新增功能APP原始碼
- Android四大檢視動畫圖文詳解Android動畫
- chrome 檢視HTTP請求詳情ChromeHTTP
- 直播帶貨小程式原始碼中,商品詳情頁是如何獲取html圖片的原始碼HTML
- 直播平臺搭建原始碼,bootstrap實現圖片輪播效果原始碼boot
- 手機直播原始碼,實現圖片瀑布流式滑動效果原始碼
- 直播短視訊原始碼短視訊APP短視訊帶貨系統多商戶直播原始碼APP
- app直播原始碼,列表越界後自動彈回原樣的效果APP原始碼
- 2022直播交友原始碼一對多直播系統原始碼同城視訊聊天交友app原始碼APP
- 直播app原始碼,系統首頁或任意頁面下拉自動重新整理APP原始碼
- 短視訊直播原始碼,實現頂部導航欄背景圖片漸隱漸現效果原始碼
- 短視訊直播原始碼,視訊計時效果,可隨時按鍵暫停原始碼
- app直播原始碼,Banner廣告圖片輪播控制元件APP原始碼控制元件
- 直播app系統原始碼,python pdf轉為圖片APP原始碼Python
- app直播原始碼,Vue獲取URL圖片的寬高APP原始碼Vue
- app直播原始碼,軟體登入時的背景圖更改APP原始碼
- app直播原始碼,el-button自定義圖片顯示APP原始碼
- app直播原始碼,利用原生JS實現回到頂部以及吸頂效果APP原始碼JS
- 直播賣貨系統原始碼中,如何展示html格式的商品詳情原始碼HTML
- 線上直播原始碼,開發一個下拉選單元件原始碼元件
- 【Android 動畫】動畫詳解之仿微信檢視大圖效果(四)Android動畫
- 社交app開發|原始碼出售|案例詳情|專案測試APP原始碼
- 成品直播原始碼推薦,js點選讓視窗抖動動畫效果原始碼JS動畫
- 視訊直播app原始碼,不同分類頂部背景色APP原始碼