下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】ListView如何實(shí)現(xiàn)顯示和隱藏Toolbar功能
在下給大家分享一下ListView如何實(shí)現(xiàn)顯示和隱藏Toolbar功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!1.準(zhǔn)備Toolbar先隱藏系統(tǒng)自帶的actionbar,在AndroidManifest.xml文件<application>標(biāo)簽中:android:theme="@style/Theme.AppCompat.Light.NoActionBar">(注意此處的Activity應(yīng)繼承AppCompatActivity)再在布局文件中添加Toolbar,activity_main.xml文件中:<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.listview_unit4_1.MainActivity">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"/>
</RelativeLayout>現(xiàn)在布局中就添加了一個(gè)Toolbar和一個(gè)ListView.2.Activitypackage
com.example.listview_unit4_1;
import
android.animation.ObjectAnimator;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.support.v7.widget.Toolbar;
import
android.util.Log;
import
android.view.MotionEvent;
import
android.view.View;
import
android.view.ViewConfiguration;
import
android.widget.ArrayAdapter;
import
android.widget.ListView;
import
java.util.ArrayList;
import
java.util.List;
public
class
MainActivity
extends
AppCompatActivity
{
private
ListView
listView;
private
List<String>
listViewData;//數(shù)據(jù)源
private
ArrayAdapter<String>
adapter;
private
Toolbar
toolbar;
private
int
mTouchSlop;//系統(tǒng)認(rèn)為的最小滑動距離
private
float
mFirstY;//用戶首次觸摸的Y坐標(biāo)
private
float
mLastY;//用戶滑動結(jié)束時(shí)Y坐標(biāo)
private
ObjectAnimator
mAnimator;//將控件與動畫聯(lián)系起來的類(可以使指定的控件,實(shí)現(xiàn)指定的動畫效果)
private
boolean
mShow;//toolbar是否顯示
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar
=
(Toolbar)
findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//初始化數(shù)據(jù)源
initData();
listView
=
(ListView)
findViewById(R.id.list_view);
//為ListView增加一個(gè)HeadView(避免第一個(gè)Item被toolbar遮擋)
//abc_action_bar_default_height_material屬性獲取系統(tǒng)actionBar的高度
View
headView
=
new
View(this);
headView.setLayoutParams(new
ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT,
(int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material)));
listView.addHeaderView(headView);
//獲取系統(tǒng)定義的最低滑動距離
mTouchSlop
=
ViewConfiguration.get(this).getScaledTouchSlop();
adapter
=
new
ArrayAdapter<String>(this,
R.layout.support_simple_spinner_dropdown_item,
listViewData);
listView.setAdapter(adapter);
//為ListView設(shè)置觸摸事件監(jiān)聽
listView.setOnTouchListener(new
View.OnTouchListener()
{
@Override
public
boolean
onTouch(View
v,
MotionEvent
event)
{
switch
(event.getAction()){
case
MotionEvent.ACTION_DOWN:
mFirstY
=
event.getY();//getY獲取的是相對于View的坐標(biāo),getRawY獲取的是相對于屏幕的坐標(biāo)
break;
case
MotionEvent.ACTION_MOVE:
mLastY
=
event.getY();
if(mLastY
-
mFirstY
>
mTouchSlop){//手指向下滑動,顯示toolbar
if(!mShow){
Log.i("tag",
"mLastY_手指下滑="+mLastY);
toolbarAnim(0);//顯示
mShow
=
!mShow;
}
}else
if(mFirstY
-
mLastY
>
mTouchSlop){//手指向上滑動,隱藏toolbar
if(mShow){
Log.i("tag",
"mLastY_手指上滑="+mLastY);
toolbarAnim(1);//隱藏
mShow
=
!mShow;
}
}
break;
default:break;
}
return
false;//一般返回false,提交給上級
}
});
}
public
void
toolbarAnim(int
flag){
if(mAnimator
!=
null
&&
mAnimator.isRunning()){
mAnimator.cancel();
}
if(flag
==
0){
Log.i("tag",
"手指下滑,》》》》》》》顯示");
mAnimator
=
ObjectAnimator.ofFloat(toolbar,
"translationY",
toolbar.getTranslationY(),
0);
}else
if(flag
==
1){
Log.i("tag",
"手指上滑,》》》》》》》隱藏");
mAnimator
=
ObjectAnimator.ofFloat(toolbar,
"translationY",
toolbar.getTranslationY(),
-toolbar.getHeight());
}
mAnimator.start();//開始動畫
}
/**
*
初始化ListView的數(shù)據(jù)源
*/
public
void
initData(){
listViewData
=
new
ArrayList<>();
String
s;
for(int
i
=
0;
i
<
20;
i
++){
s
=
""+i;
listViewData.add(s);
}
}
}(1)為ListView添加了一個(gè)HeadView高度與Toolbar高度一致,避免在RelativeLayout中Toolbar遮擋ListView第一項(xiàng);(2)設(shè)置ListView的觸摸監(jiān)聽事件:當(dāng)用戶首次按下(MotionEvent.ACTION_DOWN),記錄開始的Y坐標(biāo);在用戶滑動的過程中(MotionEvent.ACTION_MOVE),記錄用戶當(dāng)前的手指的Y坐標(biāo);兩者比較可以判斷出用戶手指滑動方向;(3)使用ObjectAnimator類控制Toolbar的動畫效果:實(shí)例化mAnimator://第一個(gè)參數(shù)用于指定這個(gè)動畫要操作的是哪個(gè)控件
//第二個(gè)參數(shù)用于指定這個(gè)動畫要操作這個(gè)控件的哪個(gè)屬性
//第三個(gè)參數(shù)是可變長參數(shù),指這個(gè)屬性值是從多少變到多少
mAnimator
=
ObjectAnimator.ofFloat(toolbar,
"translationY",
toolbar.getTr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色建材采購與施工一體化服務(wù)合同4篇
- 2025年度美容院消防安全管理服務(wù)合同4篇
- 2025年老舊小區(qū)改造工程服務(wù)合同
- 二零二五年度離婚前財(cái)產(chǎn)分割專項(xiàng)合同4篇
- 二零二五年度古建筑泥工修繕工程承包合同8篇
- 2025年個(gè)人房產(chǎn)抵押貸款合同范本2篇
- 2025年度農(nóng)藥產(chǎn)品安全評價(jià)與風(fēng)險(xiǎn)評估合同
- 2025年度個(gè)人名下房產(chǎn)出售合同范本2篇
- 課題申報(bào)參考:民國時(shí)期華東地區(qū)傳統(tǒng)體育史料搜集與輯錄研究
- 課題申報(bào)參考:面向能源結(jié)構(gòu)轉(zhuǎn)型的摻氫天然氣負(fù)荷預(yù)測及其儲能布局優(yōu)化研究
- 2024年全國職業(yè)院校技能大賽高職組(研學(xué)旅行賽項(xiàng))考試題庫(含答案)
- 2025年溫州市城發(fā)集團(tuán)招聘筆試參考題庫含答案解析
- 2025年中小學(xué)春節(jié)安全教育主題班會課件
- 2025版高考物理復(fù)習(xí)知識清單
- 除數(shù)是兩位數(shù)的除法練習(xí)題(84道)
- 2025年度安全檢查計(jì)劃
- 2024年度工作總結(jié)與計(jì)劃標(biāo)準(zhǔn)版本(2篇)
- 全球半導(dǎo)體測試探針行業(yè)市場研究報(bào)告2024
- 反走私課件完整版本
- 2024年注冊計(jì)量師-一級注冊計(jì)量師考試近5年真題附答案
- 四年級下冊數(shù)學(xué)知識點(diǎn)總結(jié)
評論
0/150
提交評論