1. 程式人生 > >仿IOS回彈效果支援任何控制元件

仿IOS回彈效果支援任何控制元件

效果圖:

效果圖

匯入依賴:

dependencies {
    // ...

    compile 'me.everything:overscroll-decor-android:1.0.4'
}

RecyclerView
支援線性佈局和網格佈局管理器(即所有原生Android佈局)。可以輕鬆適應支援自定義佈局管理器。

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

// Horizontal
OverScrollDecoratorHelper.setUpOverScroll
(recyclerView, OverScrollDecoratorHelper.ORIENTATION_HORIZONTAL); // Vertical OverScrollDecoratorHelper.setUpOverScroll(recyclerView, OverScrollDecoratorHelper.ORIENTATION_VERTICAL);

ListView

ListView listView = (ListView) findViewById(R.id.list_view);
OverScrollDecoratorHelper.setUpOverScroll(listView);

GridView

GridView gridView = (GridView) findViewById(R.id.grid_view);
OverScrollDecoratorHelper.setUpOverScroll(gridView);

ViewPager

ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
OverScrollDecoratorHelper.setUpOverScroll(viewPager);

ScrollView, HorizontalScrollView

ScrollView scrollView = (ScrollView) findViewById(R.id
.scroll_view); OverScrollDecoratorHelper.setUpOverScroll(scrollView); HorizontalScrollView horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontal_scroll_view); OverScrollDecoratorHelper.setUpOverScroll(horizontalScrollView);

Any View - Text, Image…

View view = findViewById(R.id.demo_view);    
// Horizontal
OverScrollDecoratorHelper.setUpStaticOverScroll(view, OverScrollDecoratorHelper.ORIENTATION_HORIZONTAL);
// Vertical
OverScrollDecoratorHelper.setUpStaticOverScroll(view, OverScrollDecoratorHelper.ORIENTATION_VERTICAL);

高階用法

// Horizontal RecyclerView
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
new HorizontalOverScrollBounceEffectDecorator(new RecyclerViewOverScrollDecorAdapter(recyclerView));

// ListView (vertical)
ListView listView = (ListView) findViewById(R.id.list_view);
new VerticalOverScrollBounceEffectDecorator(new AbsListViewOverScrollDecorAdapter(listView));

// GridView (vertical)
GridView gridView = (GridView) findViewById(R.id.grid_view);
new VerticalOverScrollBounceEffectDecorator(new AbsListViewOverScrollDecorAdapter(gridView));

// ViewPager
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
new HorizontalOverScrollBounceEffectDecorator(new ViewPagerOverScrollDecorAdapter(viewPager));

// A simple TextView - horizontal
View textView = findViewById(R.id.title);
new HorizontalOverScrollBounceEffectDecorator(new StaticOverScrollDecorAdapter(view));

RecyclerView 使用 ItemTouchHelper 進行拖動
從版本1.0.1起,效果可以與RecyclerView內建的滑動機制(基於ItemTouchHelper)平滑執行。但是,還需要一些很少顯式的配置工作:

// Normally you would attach an ItemTouchHelper & a callback to a RecyclerView, this way:
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
ItemTouchHelper.Callback myCallback = new ItemTouchHelper.Callback() {
    ...
};
ItemTouchHelper myHelper = new ItemTouchHelper(myCallback);
myHelper.attachToRecyclerView(recyclerView);

// INSTEAD of attaching the helper yourself, simply use the dedicated adapter
new VerticalOverScrollBounceEffectDecorator(new RecyclerViewOverScrollDecorAdapter(recyclerView, myCallback));

滾動狀態改變回調

// Note: over-scroll is set-up using the helper method.
IOverScrollDecor decor = OverScrollDecoratorHelper.setUpOverScroll(recyclerView, OverScrollDecoratorHelper.ORIENTATION_HORIZONTAL);

decor.setOverScrollStateListener(new IOverScrollStateListener() {
    @Override
    public void onOverScrollStateChange(IOverScrollDecor decor, int oldState, int newState) {
        switch (newState) {
            case STATE_IDLE:
                // No over-scroll is in effect.
                break;
            case STATE_DRAG_START_SIDE:
                // Dragging started at the left-end.
                break;
            case STATE_DRAG_END_SIDE:
                // Dragging started at the right-end.
                break;
            case STATE_BOUNCE_BACK:
                if (oldState == STATE_DRAG_START_SIDE) {
                    // Dragging stopped -- view is starting to bounce back from the *left-end* onto natural position.
                } else { // i.e. (oldState == STATE_DRAG_END_SIDE)
                    // View is starting to bounce back from the *right-end*.
                }
                break;
        }
    }
}

拖拽出View原本範圍時回撥
當前拖拽的強度(偏移量)

// Note: over-scroll is set-up by explicity instantiating a decorator rather than using the helper; The two methods can be used interchangeably for registering listeners.
VerticalOverScrollBounceEffectDecorator decor = new VerticalOverScrollBounceEffectDecorator(new RecyclerViewOverScrollDecorAdapter(recyclerView, itemTouchHelperCallback));
decor.setOverScrollUpdateListener(new IOverScrollUpdateListener() {
    @Override
    public void onOverScrollUpdate(IOverScrollDecor decor, int state, float offset) {
        final View view = decor.getView();
        if (offset > 0) {
            // 'view' is currently being over-scrolled from the top.
        } else if (offset < 0) {
            // 'view' is currently being over-scrolled from the bottom.
        } else {
            // No over-scroll is in-effect.
            // This is synonymous with having (state == STATE_IDLE).
        }
    }
});

自定義控制元件

public class CustomView extends View {
    // ...
}

final CustomView view = (CustomView) findViewById(R.id.custom_view);
new VerticalOverScrollBounceEffectDecorator(new IOverScrollDecoratorAdapter() {

    @Override
    public View getView() {
        return view;
    }

    @Override
    public boolean isInAbsoluteStart() {
        // canScrollUp() is an example of a method you must implement
        return !view.canScrollUp();
    }

    @Override
    public boolean isInAbsoluteEnd() {
         // canScrollDown() is an example of a method you must implement
        return !view.canScrollDown();
    }
});

拖拽強度和回彈效果配置

/// Make over-scroll applied over a list-view feel more 'stiff'
new VerticalOverScrollBounceEffectDecorator(new AbsListViewOverScrollDecorAdapter(view),
        5f, // Default is 3
        VerticalOverScrollBounceEffectDecorator.DEFAULT_TOUCH_DRAG_MOVE_RATIO_BCK,
        VerticalOverScrollBounceEffectDecorator.DEFAULT_DECELERATE_FACTOR);

// Make over-scroll applied over a list-view bounce-back more softly
new VerticalOverScrollBounceEffectDecorator(new AbsListViewOverScrollDecorAdapter(view),
        VerticalOverScrollBounceEffectDecorator.DEFAULT_TOUCH_DRAG_MOVE_RATIO_FWD,
        VerticalOverScrollBounceEffectDecorator.DEFAULT_TOUCH_DRAG_MOVE_RATIO_BCK,
        -1f // Default is -2
        );

禁用回彈效果和開啟回彈效果

IOverScrollDecor decor = OverScrollDecoratorHelper.setUpOverScroll(view);

// Detach. You are strongly encouraged to only call this when overscroll isn't
// in-effect: Either add getCurrentState()==STATE_IDLE as a precondition,
// or use a state-change listener.
decor.detach();
// Attach.
decor.attach();

相關推薦

仿IOS效果支援任何控制元件

效果圖: 匯入依賴: dependencies { // ... compile 'me.everything:overscroll-decor-android:1.0.4

android ListView 仿IOS 效果

最近看IOS的下拉效果感覺很不錯,當拉倒最上面和最下面的時候繼續拉動會有緩衝,想在android裡面也做一個,到網上到處找,沒有找到好的方法,據說android新的API對ListView有這樣的支援,感覺不是特別好用。 自己利用scroller實現了一下,廢話不多說了直接

Android中自定義仿IOS效果的ListView

ios中有一個控制元件回彈的效果,比如listview ,拉動到第一條或者最後一條資料的時候,還可以繼續拉動,鬆手就回彈到原來位置,很贊,其實在android中實現起來也非常簡單,我們只需要重寫listview的下面兩個 方法即可 先上圖 @Override pub

自定義帶滑動距離監控和仿iOS效果的NestedScrollView

  在最近的Support Library更新中(25.3.0),新增或者修復了許多東西,具體可以看revisions,其中有一個新增的動畫效果:SpringAnimation 即彈簧動畫,SpringAnimation是一個受SpringForce驅動的動畫。彈簧力限定

iOS鍵盤出完美移動控制元件

新增監聽(最好放在ViewWillAppear裡, 在檢視將要消失時移除監聽) 這裡監聽鍵盤Frame的變化而不是監聽鍵盤的顯示和隱藏 [[NSNotificationCenter defaultCe

android仿IOS頁面效果

碼農同學們做過手機開發的相比一定對ios平臺頁面的上下回彈效果印象深刻,特別是android開發對此是各種嫉妒羨慕恨啊,在特效方面蘋果做的很好,做了很多,當然谷歌也不差,神馬特效咱們都能做出來,因為android開放更多,移植性也更好,so..我特麼手賤自己寫了一個上下拉動

iOS動畫效果

新建一個專案,然後在storyboard中放入一個View並用autolayout設定View的位置 和上邊的距離(設定Y) 離左邊的距離(設定X) 設定大小 給View拖一個輸出口 在viewDidLoad中新增給view新增拖動手勢

Android仿ios底部框,支援傳入list集合,任意配置個數

不說廢話,一看程式碼誰都懂。   public class BottomDialog { private Context context; private Dialog dialog; private TextView txt_title; p

Android仿ios底部出框效果

準備: public class ActionSheet { public interface OnActionSheetSelected { void onClick(int whichButton); } private ActionShee

Android 自定義ScrollView 支援慣性滑動,慣性效果支援上拉載入更多

先講下原理: ScrollView的子View 主要分為3部分:head頭部,滾動內容,fooder底部 我們實現慣性滑動,以及回彈,都是靠超過head或者fooder 就重新滾動到  ,內容的頂部或者底部。 之前看了Pulltorefresh 他是通過不斷改變 head或

仿ios的滑動效果

public 頭部 ati 設置 class iss generated ttr stat package code.suibianchou.com.custormview2;import android.annotation.SuppressLint;import and

-webkit-overflow-scrolling 與滾動效果.

插件 列表 卡住 快的 優雅 css 移動設備 分享 兼容性 參考來源:https://developer.mozilla.org/zh-CN/docs/Web/CSS/-webkit-overflow-scrolling      https://www.w3cways.

angual+mui 雙欄上拉加載,微信裏面禁用默認事件可用,可以防止瀏覽器效果

apply length data mui this reat mobile ng- a10 //html 部分 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #2eafa9

自定義ScrollView 實現上拉下拉的效果--並且子控件中有Viewpager的情況

是否 AS abs pri tar utils lda animation ted onInterceptTouchEvent就是對子控件中Viewpager的處理:左右滑動應該讓viewpager消費 1 public class MyScrollView ext

仿ios底部窗選單按鈕

layout佈局實現listview+button具體看程式碼: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pa

Android 高仿 QQ5.0 側滑選單效果 自定義控制元件來襲

上一篇部落格帶大家實現了:Android 自定義控制元件打造史上最簡單的側滑選單 ,有兄弟看了以後說,你這滑動選單過時了呀~QQ5.0的效果還不錯~~嗯,的確,上一篇也承諾過,稍微修改上一篇的程式碼,實現QQ5.0側滑選單~~好了,下面就開始為大家展示寫一個類QQ的側滑有多e

解決蘋果微信瀏覽器下拉效果

.content是需要滑動的部分 var overscroll = function(el) { el.addEventListener('touchstart', function()

移動端阻止瀏覽器中預設元素滑動效果(橡皮筋效果

在js檔案中加如下程式碼: document.addEventListener('touchstart',function(e){ e.preventDefault(); //

JavaScript禁止微信瀏覽器下拉效果

本文例項為大家分享了JavaScript禁止微信瀏覽器下拉回彈的效果 方法1:         <script type="text/javascript">             var overscroll = function(el){     

原來操控介面可以這麼簡單----安卓上下滑動縮放頂部圖片,左右滑動結束當前Activity,及View柔和效果

先上效果圖: 上傳圖片不能超過2M,費了好大勁。每一張gif動的有點快,將就看。 首先說原理: 為activity的xml檔案根佈局新增setOnTouchListener。上下滑動和左右滑動的所有操作都是在OnTouchListener的onTouch方法中實現的,通過