炫酷-背景圖垂直循環(huán)滾動登錄頁伯诬,Android RecyclerView實現(xiàn)

炫酷-背景圖上下循環(huán)滾動登錄頁,Android RecyclerView實現(xiàn)方法

某站的登錄頁背景不停循環(huán)滾動巫财,和街邊的廣告箱很像盗似,感覺不錯我也心動了。決定高仿一下平项,參考了幾篇文章后就動手了赫舒。
實現(xiàn)步驟:

1.效果圖展示
2.自定義實現(xiàn)滾動效果RecyclerView
3.適配器Adapter實現(xiàn)
4.適配器布局文件
5.主程序調(diào)用過程
6.主布局文件
7.總結(jié)

1.效果圖展示

666.gif

2.自定義實現(xiàn)滾動效果RecyclerView

AutoPollRecyclerView.java

public class AutoPollRecyclerView extends RecyclerView {
    private static final long TIME_AUTO_POLL = 16;
    AutoPollTask autoPollTask;
    private boolean running; //標(biāo)示是否正在自動輪詢
    private boolean canRun;//標(biāo)示是否可以自動輪詢,可在不需要的是否置false

    public AutoPollRecyclerView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        autoPollTask = new AutoPollTask(this);
    }

    static class AutoPollTask implements Runnable {
        private final WeakReference<AutoPollRecyclerView> mReference;

        //使用弱引用持有外部類引用->防止內(nèi)存泄漏
        public AutoPollTask(AutoPollRecyclerView reference) {
            this.mReference = new WeakReference<AutoPollRecyclerView>(reference);
        }

        @Override
        public void run() {
            AutoPollRecyclerView recyclerView = mReference.get();
            if (recyclerView != null && recyclerView.running && recyclerView.canRun) {
                recyclerView.scrollBy(2, 2);
                recyclerView.postDelayed(recyclerView.autoPollTask, recyclerView.TIME_AUTO_POLL);
            }
        }
    }

    //開啟:如果正在運行,先停止->再開啟
    public void start() {
        if (running)
            stop();
        canRun = true;
        running = true;
        postDelayed(autoPollTask, TIME_AUTO_POLL);
    }

    public void stop() {
        running = false;
        removeCallbacks(autoPollTask);
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        switch (e.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (running)
                    stop();
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_OUTSIDE:
                if (canRun)
                    start();
                break;
        }
        //return  false,注釋掉onTouchEvent()方法里面的stop和start方法闽瓢,則列表自動滾動且不可觸摸
        return super.onTouchEvent(e);}
}

3.適配器Adapter實現(xiàn)

AutoPollAdapter.java

public class AutoPollAdapter extends RecyclerView.Adapter<AutoPollAdapter.BaseViewHolder> {
    private final Context mContext;


    public AutoPollAdapter(Context context) {
        this.mContext = context;
    }

    @Override
    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.auto_list_item, parent, false);
        BaseViewHolder holder = new BaseViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(BaseViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return Integer.MAX_VALUE;
    }

    class BaseViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;

        public BaseViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.iv_login_bg);

        }
    }

}

4.適配器布局文件

auto_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/iv_login_bg"
    android:layout_width="480dp"
    android:layout_height="2065dp"
    android:scaleType="matrix"
    android:adjustViewBounds="true"
    android:background="@drawable/login_bg01"/>

5.主程序調(diào)用過程

LoginActivity.java

public class LoginActivity extends AppCompatActivity {
    private AutoPollRecyclerView recyclerView;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        recyclerView = findViewById(R.id.recyclerview);

        recyclerView.setLayoutManager(
                new LinearLayoutManager(
                        this,
                        //設(shè)置LinearLayoutManager.HORIZONTAL  則水平滾動
                        LinearLayoutManager.VERTICAL, false));

            AutoPollAdapter autoPollAdapter = new AutoPollAdapter(getApplicationContext());
            recyclerView.setAdapter(autoPollAdapter);
            //啟動滾動
            recyclerView.start();

    }
}

6.主布局文件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <com.imooc.guessmusic.view.AutoPollRecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints" />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/login_dark" />

    <ImageView
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="120dp"
        android:src="@drawable/login_logo" />

    <TextView
        android:layout_width="400dp"
        android:layout_height="60dp"
        android:layout_marginTop="60dp"
        android:layout_gravity="center"
        android:background="@drawable/btn_c"
        android:gravity="center"
        android:textSize="22sp"
        android:textStyle="bold"
        android:textColor="@color/black"
        android:text="微信登錄" />
    <TextView
        android:layout_width="400dp"
        android:layout_height="60dp"
        android:layout_marginTop="150dp"
        android:layout_gravity="center"
        android:background="@drawable/btn_c_b"
        android:gravity="center"
        android:textSize="22sp"
        android:textColor="@color/text_white"
        android:text="手機號碼快捷登錄" />
</FrameLayout>

7.總結(jié)

Demo里面使用了沉浸式效果接癌,如何實現(xiàn)請參考下面的文章。
Android-沉浸式的實現(xiàn)
Demo里面使用了今日頭條適配方案能適配97%的手機扣讼,3%劉海屏與水滴屏未做適配缺猛,是如何實現(xiàn)請參考下面的文章。
今日頭條的屏幕適配方案,簡易使用
核心代碼就是自定義的RecyclerView代碼枯夜,如果你想做其它效果的滾動可以參考下面的文章弯汰。
Android實現(xiàn)類似中獎信息自動滾動效果

Android RecyclerView打造自動循環(huán)效果

原代碼獻(xiàn)上:https://pan.baidu.com/s/18sy-Gvjav8Dz2PwctrDcFw
提取碼:sr0i

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艰山,一起剝皮案震驚了整個濱河市湖雹,隨后出現(xiàn)的幾起案子树绩,更是在濱河造成了極大的恐慌蛇摸,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件订讼,死亡現(xiàn)場離奇詭異纵装,居然都是意外死亡征讲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門橡娄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诗箍,“玉大人,你說我怎么就攤上這事挽唉÷俗妫” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵瓶籽,是天一觀的道長匠童。 經(jīng)常有香客問我,道長塑顺,這世上最難降的妖魔是什么汤求? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮严拒,結(jié)果婚禮上扬绪,老公的妹妹穿的比我還像新娘。我一直安慰自己裤唠,他們只是感情好勒奇,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巧骚,像睡著了一般赊颠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劈彪,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天竣蹦,我揣著相機與錄音,去河邊找鬼沧奴。 笑死痘括,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纲菌,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼挠日,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翰舌?” 一聲冷哼從身側(cè)響起嚣潜,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎椅贱,沒想到半個月后懂算,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡庇麦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年计技,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山橄。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡垮媒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出航棱,到底是詐尸還是另有隱情睡雇,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布丧诺,位于F島的核電站入桂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏驳阎。R本人自食惡果不足惜抗愁,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呵晚。 院中可真熱鬧蜘腌,春花似錦、人聲如沸饵隙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金矛。三九已至芯急,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驶俊,已是汗流浹背娶耍。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饼酿,地道東北人榕酒。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓胚膊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親想鹰。 傳聞我的和親對象是個殘疾皇子紊婉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359