1. 程式人生 > >ListView+TitleBar實現滾動ListView時TitleBar的透明度隨之變化

ListView+TitleBar實現滾動ListView時TitleBar的透明度隨之變化

越來越多的應用用到這種效果,自己動手寫了寫,希望和大家互相交流學習,不足之處還請不吝賜教。閒話不多,先上圖:


原理是根據ListView當前滑動的高度和一個固定的高度值(需要在此時設定TitleBarView的alpha值為1)相除,得到一個alpha值,來動態設定TitleBar的透明度。

佈局檔案如下:

<RelativeLayout 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" >


    <ListView
        android:id="@+id/mlistview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#f2f2f2"
        android:cacheColorHint="#00000000"/>


    <LinearLayout
        android:id="@+id/layout_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FF0000" >


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="10dp"
            android:text="比賽頁面"
            android:textColor="#FFFFFF"
            android:textSize="18sp" />
    </LinearLayout>


</RelativeLayout>

程式碼如下:

package com.example.testactivity;


import com.nineoldandroids.view.ViewHelper;


import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;


public class MainActivity extends Activity {

private ListView mlistview;
private LinearLayout layout_title;
private int MAX_NUMBER = 40;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

layout_title = (LinearLayout) findViewById(R.id.layout_title);
mlistview = (ListView) findViewById(R.id.mlistview);

String[] arrayStr = new String[MAX_NUMBER];
for(int i = 0; i < MAX_NUMBER; i ++){
arrayStr[i] = i+"";
}
mlistview.setAdapter(new ArrayAdapter<String>(this, 
android.R.layout.simple_expandable_list_item_1, arrayStr));
mlistview.setOnScrollListener(new OnScrollListener() {

private SparseArray<ItemRecod> RecodSA = new SparseArray<>();
private int mFirstItem = 0;
private int defaultHeight = 0;

@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
}

@SuppressLint("NewApi")
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// firstVisibleItem 當前第一個item的座標

mFirstItem = firstVisibleItem;
// 當前頁的第一個Item的View物件
View firstView = view.getChildAt(0);
if (null != firstView) {
ItemRecod itemRecord = RecodSA.get(firstVisibleItem);
if (null == itemRecord) {
//處理快速滑動時,跳過的情況
//檢測有沒有跳過
for (int i = 0; i < firstVisibleItem; i++) {
if (null == RecodSA.get(i)) {
//被跳過了,取上一個的高度,top不用管
ItemRecod skipItem = new ItemRecod();
skipItem.height = defaultHeight;
RecodSA.append(i, skipItem);
}
}
itemRecord = new ItemRecod();
}
itemRecord.height = defaultHeight = firstView.getHeight();
itemRecord.top = firstView.getTop();
RecodSA.append(firstVisibleItem, itemRecord);
}
float alpha = ((float) (getScrollY()) / (float) (500));
if (alpha > 1.0f) {
alpha = 1.0f;
}
ViewHelper.setAlpha(layout_title, alpha);
}
private int getScrollY() {
int height = 0;
// 此處採用迴圈遍歷的方式而不用height*item數量的原因是,item的高度可能不一致。
for (int i = 0; i < mFirstItem; i++) {
ItemRecod itemRecod = RecodSA.get(i);
//處理快速滑動
height += itemRecod.height;
}
ItemRecod itemRecod = RecodSA.get(mFirstItem);
if (null == itemRecod) {
itemRecod = new ItemRecod();
}
return height - itemRecod.top;
}

class ItemRecod{
int height;
int top;
}
});
}

}

相關推薦

ListView+TitleBar實現滾動ListViewTitleBar透明度隨之變化

越來越多的應用用到這種效果,自己動手寫了寫,希望和大家互相交流學習,不足之處還請不吝賜教。閒話不多,先上圖: 原理是根據ListView當前滑動的高度和一個固定的高度值(需要在此時設定TitleBarView的alpha值為1)相除,得到一個alpha值,來動態設定T

使用better-scroll實現滾動選單,出現報錯“Failed to resolve directive: el”解決方案。

錯誤詳情: 使用better-scroll實現滾動選單時,報錯“Failed to resolve directive: el”。 錯誤原因: 這是因為v-el在vue2.x以後被淘汰。使用新的標籤ref替換v-el,下面是修改的方法。 解決

用wow.js實現滾動頁面觸發CSS 動畫效果的外掛

有的頁面在向下滾動的時候,有些元素會產生細小的動畫效果。雖然動畫比較小,但卻能吸引你的注意。如果你希望你的頁面也更加有趣,那麼你可以試試 WOW.js。 WOW.js 依賴 animate.css,所以它支援 animate.css 多達 60 多種的動畫效果,能滿足您的各

自定義控制元件由淺到深(二)實現ViewPager滑動的小圓點變化

在我的之前兩個部落格有介紹ViewPager的使用和簡述自定義控制元件,但在ViewPager的使用中,我沒有添加當ViewPager滑動狀態改變時,下方小圓點跟隨變化的效果並沒有實現。    實現ViewPager小圓點滑動效果的方法有多種方法,這次我們主要是為了深入的研

使用 flutter 的ListView實現滾動列表

現如今開啟一個 App,比如頭條、微博,都會有長列表,隨著我們不斷地滑動,視窗內的內容也會不斷地更新。今天就用 Flutter 實現一下這種效果。 這裡的表現其實就相當於有一個固定長度的容器,然後超出的內容是不可見的,只有當你向上或向下滑動螢幕時,視窗外看不見的內容才會出現在視窗中。如

UWP: ListView 中與滾動有關的兩個需求的實現

在 App 的開發過程中,ListView 控制元件是比較常用的控制元件之一。掌握它的用法,能幫助我們在一定程度上提高開發效率。本文將會介紹 ListView 的一種用法——獲取並設定 ListView 的滾動位置,以及獲取滾動位置處的專案。這裡多說一句,由於這個描述有點,所以本文的標題實在不好起。 舉個例

listview中有點選事件實現方法

1、首先在adapter中定義介面 private static OnAddClickListener onItemAddClick;//向activity傳值 //向activity傳值 pu

解決Android中ScrollView裡巢狀listviewlistview不能不能滾動的問題

       我們在Android的佈局中有時會使用到ScrollView,然後在ScrollView中再巢狀listview,但是這樣就會導致listview獲取焦點失敗不能滾動(具體原理可自行搜尋Android的觸控事件的分發機制),在搜尋解決方案時發現需要重寫Scrol

Android ListView動畫實現方法

rri pan 自己 data- src def popu 動畫 onclick 在Android中listview是最經常使用的控件之中的一個,可是有時候我們會認為千篇一律的listview看起來過於單調,於是就產生了listView動畫,listview載入了動畫會

listview 沒數據內容顯示一個提示文本

圖片 技術 etl image view listview bsp 分享 alt listview和textview 1:1。listview無內容的時候本身是不顯示的,所以textview會顯示 getlistview獲取系統定義的listview li

Android入門 ListView SimpleAdapter實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

ListView實現button功能

/建立名為my_listview的xml檢視 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

C#ListView如何實現動態新增檔案

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] st = sc.nextLine().split("

簡易到航天的實現ListView SimpleAdapeter)

一:main 介面程式碼: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

Android中通過ListView實現簡單新聞列表

Android中實現簡單的新聞列表 “本文主要針對Android新手,大神請繞道…” 使用到的第三方庫 Retrofit2+RxJava2 進行網路請和json資料的解析,註解框架:Butterknife 8.5.1 如果以上的框架還有同學不知道怎麼使用可以看看

Kotlin學習記錄(三)—— 子執行緒獲取資料,實現簡單ListView

上一篇簡單介紹了Kotlin的一些基礎構成,當然還有像物件宣告、操作符等等都未涉及到,這些會在以後用到的過程中進行詳細說明。 專案中ListView列表出現的頻率是很高的,我們就以實現一個簡單ListView為目標,介紹一下在子執行緒中獲取資料等問題。 首先在la

滾動頁面DIV到達頂部固定在頂部(jq實現)

<body style="margin:0px;"> <div style="height:300px;background:#e0e0e0"></div> <div id="fixedMenu_ke

實現滾動到一定位置,導航欄置頂的效果

html部分: <body> <h1>標題1</h1> <h1>標題2</h1> <h1>標題1</h1> <h1>標題2</h1> <div cl

UIAutomator中滾動ListView獲得目標TextView控制元件物件的經驗點滴

當建立一個UiScrollable物件時,如果指定的引數是new UiSelector().scrollable(true),那麼會出現以下問題 當可滾動控制元件(比如ListView)不滿一頁不需

android 設定ListView不讓滾動

自定義控制元件繼承父類,我只重寫了一個構造方法,導致專案除錯執行一直失敗。解決方案:至少是預設的前三個。(這裡繼承自ListView類) public class NonScrollableList