




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(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)為的最小滑動(dòng)距離
private
float
mFirstY;//用戶首次觸摸的Y坐標(biāo)
private
float
mLastY;//用戶滑動(dòng)結(jié)束時(shí)Y坐標(biāo)
private
ObjectAnimator
mAnimator;//將控件與動(dòng)畫(huà)聯(lián)系起來(lái)的類(可以使指定的控件,實(shí)現(xiàn)指定的動(dòng)畫(huà)效果)
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);
//為L(zhǎng)istView增加一個(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)定義的最低滑動(dòng)距離
mTouchSlop
=
ViewConfiguration.get(this).getScaledTouchSlop();
adapter
=
new
ArrayAdapter<String>(this,
R.layout.support_simple_spinner_dropdown_item,
listViewData);
listView.setAdapter(adapter);
//為L(zhǎng)istView設(shè)置觸摸事件監(jiān)聽(tīng)
listView.setOnTouchListener(new
View.OnTouchListener()
{
@Override
public
boolean
onTouch(View
v,
MotionEvent
event)
{
switch
(event.getAction()){
case
MotionEvent.ACTION_DOWN:
mFirstY
=
event.getY();//getY獲取的是相對(duì)于View的坐標(biāo),getRawY獲取的是相對(duì)于屏幕的坐標(biāo)
break;
case
MotionEvent.ACTION_MOVE:
mLastY
=
event.getY();
if(mLastY
-
mFirstY
>
mTouchSlop){//手指向下滑動(dòng),顯示toolbar
if(!mShow){
Log.i("tag",
"mLastY_手指下滑="+mLastY);
toolbarAnim(0);//顯示
mShow
=
!mShow;
}
}else
if(mFirstY
-
mLastY
>
mTouchSlop){//手指向上滑動(dòng),隱藏toolbar
if(mShow){
Log.i("tag",
"mLastY_手指上滑="+mLastY);
toolbarAnim(1);//隱藏
mShow
=
!mShow;
}
}
break;
default:break;
}
return
false;//一般返回false,提交給上級(jí)
}
});
}
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();//開(kāi)始動(dòng)畫(huà)
}
/**
*
初始化ListView的數(shù)據(jù)源
*/
public
void
initData(){
listViewData
=
new
ArrayList<>();
String
s;
for(int
i
=
0;
i
<
20;
i
++){
s
=
""+i;
listViewData.add(s);
}
}
}(1)為L(zhǎng)istView添加了一個(gè)HeadView高度與Toolbar高度一致,避免在RelativeLayout中Toolbar遮擋ListView第一項(xiàng);(2)設(shè)置ListView的觸摸監(jiān)聽(tīng)事件:當(dāng)用戶首次按下(MotionEvent.ACTION_DOWN),記錄開(kāi)始的Y坐標(biāo);在用戶滑動(dòng)的過(guò)程中(MotionEvent.ACTION_MOVE),記錄用戶當(dāng)前的手指的Y坐標(biāo);兩者比較可以判斷出用戶手指滑動(dòng)方向;(3)使用ObjectAnimator類控制Toolbar的動(dòng)畫(huà)效果:實(shí)例化mAnimator://第一個(gè)參數(shù)用于指定這個(gè)動(dòng)畫(huà)要操作的是哪個(gè)控件
//第二個(gè)參數(shù)用于指定這個(gè)動(dòng)畫(huà)要操作這個(gè)控件的哪個(gè)屬性
//第三個(gè)參數(shù)是可變長(zhǎng)參數(shù),指這個(gè)屬性值是從多少變到多少
mAnimator
=
ObjectAnimator.ofFloat(toolbar,
"translationY",
toolbar.getTr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代理電動(dòng)車(chē)合同范例
- 借名買(mǎi)房合同范本
- 租賃合同通知函
- 農(nóng)村收購(gòu)單車(chē)合同范例
- 農(nóng)村果園承包合同范本
- 云平臺(tái)建設(shè)合同范本
- 云南租房合同范本
- 供應(yīng)電水氣合同范本
- 水電站隧道排水孔施工方案
- 乙方裝修合同范本
- DeepSeek從入門(mén)到精通培訓(xùn)課件
- 俄羅斯進(jìn)口凍肉合同范例
- 2025年湖北省技能高考(建筑技術(shù)類)《建設(shè)法規(guī)》模擬練習(xí)試題庫(kù)(含答案)
- 急性呼衰院前急救流程
- 部編版七年級(jí)語(yǔ)文下冊(cè)《第2課說(shuō)和做》課件
- 養(yǎng)老服務(wù)信息化發(fā)展-深度研究
- 2024-2025學(xué)年第二學(xué)期學(xué)??倓?wù)工作計(jì)劃(附2月-6月安排表行事歷)
- 夫妻離婚協(xié)議書(shū)范本2024
- 交管12123學(xué)法減分題庫(kù)(含答案)
- 2025年蘇州工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論