【移動應(yīng)用開發(fā)技術(shù)】ListView如何實(shí)現(xiàn)顯示和隱藏Toolbar功能_第1頁
【移動應(yīng)用開發(fā)技術(shù)】ListView如何實(shí)現(xiàn)顯示和隱藏Toolbar功能_第2頁
【移動應(yīng)用開發(fā)技術(shù)】ListView如何實(shí)現(xiàn)顯示和隱藏Toolbar功能_第3頁
【移動應(yīng)用開發(fā)技術(shù)】ListView如何實(shí)現(xiàn)顯示和隱藏Toolbar功能_第4頁
【移動應(yīng)用開發(fā)技術(shù)】ListView如何實(shí)現(xiàn)顯示和隱藏Toolbar功能_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論