最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

listview的上滑下滑監(jiān)聽,上下滑監(jiān)聽隱藏頂部選項欄的實例

 更新時間:2018年01月04日 14:31:18   作者:西域黃老板  
下面小編就為大家分享一篇listview的上滑下滑監(jiān)聽,上下滑監(jiān)聽隱藏頂部選項欄的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

listview的上滑下滑監(jiān)聽,來隱藏和顯示頂部選項欄的特效,京東 同程等APP的資源列表都有此特效.

兩個重點:

①listview的setOnTouchListener監(jiān)聽方法

當(dāng)滑動的Y位置減去按下的Y位置大于最小滑動距離時則為向下滑動

反之,當(dāng)按下的Y位置減去滑動的Y位置大于最小滑動距離則為向上滑動

②位移動畫

就只要這兩點需要注意的,直接上代碼,注釋很清楚。

package com.example.android_topbar_gone;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewConfiguration;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
  private RelativeLayout top_rl;
  private ListView listview;
  private List<Map<String, Object>>list = new ArrayList<Map<String,Object>>();
  private int mTouchShop;//最小滑動距離
  protected float mFirstY;//觸摸下去的位置
  protected float mCurrentY;//滑動時Y的位置
  protected int direction;//判斷是否上滑或者下滑的標(biāo)志
  protected boolean mShow;//判斷是否執(zhí)行了上滑動畫
  private Animator mAnimator;//動畫屬性
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //初始化id
    setViews();
    //加載listview
    setListView();
  }
  /**
   * 初始化id
   */
  private void setViews() {
    top_rl = (RelativeLayout) findViewById(R.id.rl_ttt);
    listview = (ListView) findViewById(R.id.listview);
  }
  /**
   * 加載listview
   */
  private void setListView() {
    View header = View.inflate(this, R.layout.headview, null);//自定義一個頭布局和頂部執(zhí)行動畫的布局等高就行
    listview.addHeaderView(header);//加載頭布局
    //獲得一個最小滑動距離
    mTouchShop = ViewConfiguration.get(this).getScaledTouchSlop();//系統(tǒng)級別的一個屬性,判斷用戶的最小滑動距離的,可查看源碼為16
    //給集合添加數(shù)據(jù)
    for (int i = 0; i < 40; i++) {
      Map<String, Object>map = new HashMap<String, Object>();
      map.put("str", "第"+i+"個item");
      list.add(map);
    }
    String a[] = {"str"};
    int b[] = {R.id.tv01};
    //simpleadapter加載集合數(shù)據(jù)
    SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.item, a, b);
    listview.setAdapter(adapter);
    listview.setOnItemClickListener(new OnItemClickListener() {//listview的點擊方法
      @Override
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
          long arg3) {
        Toast.makeText(MainActivity.this, list.get(arg2-1).get("str")+"", 0).show();//-1是因為加載的頭布局
      }
    });
    listview.setOnTouchListener(new OnTouchListener() {//listview的觸摸事件
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
          mFirstY = event.getY();//按下時獲取位置
          break;
        case MotionEvent.ACTION_MOVE:
          mCurrentY = event.getY();//得到滑動的位置
          if(mCurrentY - mFirstY > mTouchShop){//滑動的位置減去按下的位置大于最小滑動距離 則表示向下滑動
            direction = 0;//down
          }else if(mFirstY - mCurrentY > mTouchShop){//反之向上滑動
            direction = 1;//up
          }
          if(direction == 1){//判斷如果是向上滑動 則執(zhí)行向上滑動的動畫
            if(mShow){//判斷動畫是否執(zhí)行了 執(zhí)行了則改變狀態(tài)
              //執(zhí)行往上滑動的動畫
              tolbarAnim(1);
              mShow = !mShow;
            }
          }else if(direction == 0){//判斷如果是向下滑動 則執(zhí)行向下滑動的動畫
            if(!mShow){//判斷動畫是否執(zhí)行了 執(zhí)行了則改變狀態(tài)
              //執(zhí)行往下滑動的動畫
              tolbarAnim(0);
              mShow = !mShow;
            }
          }
          break;
        case MotionEvent.ACTION_UP:
          break;
        }
        return false;
      }
    });
  }

  private void tolbarAnim(int flag){
    if(mAnimator != null && mAnimator.isRunning()){//判斷動畫存在 如果啟動了,則先關(guān)閉
      mAnimator.cancel();
    }
    if(flag == 0){
      mAnimator = ObjectAnimator.ofFloat(top_rl, "translationY", top_rl.getTranslationY(),0);//從當(dāng)前位置位移到0位置
    }else{
      mAnimator = ObjectAnimator.ofFloat(top_rl, "translationY", top_rl.getTranslationY(),-top_rl.getHeight());//從當(dāng)前位置移動到布局負(fù)高度的wiz
    }
    mAnimator.start();//執(zhí)行動畫
  }

}
<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/listview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@null"
    android:divider="@null"
    android:listSelector="@android:color/transparent"
    android:scrollbars="@null" >
  </ListView>

  <RelativeLayout 
    android:id="@+id/rl_ttt"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#39caab"
    ></RelativeLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="50dp" >
  </RelativeLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#eeeeee" >
    <TextView
      android:id="@+id/tv01"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"
      android:layout_marginLeft="18dp"
      android:text="第一個item"
      android:textColor="#646464"
      android:textSize="14dp" />
    <TextView
      android:layout_width="match_parent"
      android:layout_height="0.5dp"
      android:layout_alignParentBottom="true"
      android:background="#d2d2d2" />
  </RelativeLayout>
</RelativeLayout>

一個listview的滑動監(jiān)聽動畫實現(xiàn)搞定 很好理解對吧。

以上這篇listview的上滑下滑監(jiān)聽,上下滑監(jiān)聽隱藏頂部選項欄的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 安全加密:數(shù)字簽名和數(shù)字證書詳解

    Android 安全加密:數(shù)字簽名和數(shù)字證書詳解

    本文主要介紹Android 安全加密數(shù)字簽名和數(shù)字證書的資料,這里整理詳細(xì)的資料及數(shù)字簽名和數(shù)字證書應(yīng)用詳解,有需要的小伙伴可以參考下
    2016-09-09
  • android異步任務(wù)設(shè)計思詳解(AsyncTask)

    android異步任務(wù)設(shè)計思詳解(AsyncTask)

    AsyncTask在Android十分常用,那為什么如此常用呢,不用行不行呢,內(nèi)部又是怎么實現(xiàn)的呢,為什么Java的API中沒有這個類呢,看完本文后,你將會知道答案
    2014-02-02
  • Android仿滴滴出行驗證碼輸入框功能實例代碼

    Android仿滴滴出行驗證碼輸入框功能實例代碼

    最近項目經(jīng)理交給我們組一個類似滴滴出行填寫驗證碼的彈框功能,拿到這個項目需求真是把我忙暈了,下面通過本文給大家分享Android仿滴滴出行驗證碼輸入框功能實例代碼,需要的朋友參考下吧
    2017-12-12
  • Android 安全加密:對稱加密詳解

    Android 安全加密:對稱加密詳解

    本文主要介紹Android 安全加密對稱加密,這里整理了詳細(xì)的資料及介紹凱撒密碼和對稱密碼的資料,有興趣的小伙伴可以參考下
    2016-09-09
  • Android利用RecyclerView實現(xiàn)全選、置頂和拖拽功能示例

    Android利用RecyclerView實現(xiàn)全選、置頂和拖拽功能示例

    列表控件可以說是我們絕大部分App中都會使用的,為了提升交互樂趣,我們經(jīng)常需要在列表中加入置頂、拖拽等操作,下面這篇文章主要介紹了Android利用RecyclerView如何實現(xiàn)全選、置頂和拖拽功能的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • Android編程實現(xiàn)圖片背景漸變切換與圖層疊加效果

    Android編程實現(xiàn)圖片背景漸變切換與圖層疊加效果

    這篇文章主要介紹了Android編程實現(xiàn)圖片背景漸變切換與圖層疊加效果,涉及Android圖形特效的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • android開發(fā)修改狀態(tài)欄背景色和圖標(biāo)顏色的示例

    android開發(fā)修改狀態(tài)欄背景色和圖標(biāo)顏色的示例

    本篇文章主要介紹了android開發(fā)修改狀態(tài)欄背景色和圖標(biāo)顏色的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android圖片處理實例介紹(圖)

    Android圖片處理實例介紹(圖)

    本篇文章介紹了,Android中圖片處理實例介紹,需要的朋友參考下
    2013-04-04
  • Android中的JNI數(shù)組操作教程

    Android中的JNI數(shù)組操作教程

    這篇文章主要給大家介紹了關(guān)于Android中JNI數(shù)組操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Android圖片框架Glide原理深入探索

    Android圖片框架Glide原理深入探索

    對于Glide這個加載圖片的框架,很多人都在用,我之前使用的是ImageLoader,最近查資料時,發(fā)現(xiàn)Glide才是Google推薦的加載圖片框架,功能非常強大,而且還有Google專人維護(hù),要知道,ImageLoader已經(jīng)沒人維護(hù)了,除了問題可沒人解答。所以有必要整理一下Glide的使用
    2022-11-11

最新評論

昌宁县| 抚顺市| 新巴尔虎右旗| 稻城县| 波密县| 宁蒗| 中方县| 平罗县| 夏邑县| 南充市| 沙洋县| SHOW| 如东县| 丁青县| 晋中市| 张家川| 锡林浩特市| 安仁县| 应用必备| 宁德市| 于田县| 丰都县| 施甸县| 永定县| 三江| 聊城市| 霍山县| 高要市| 城市| 依兰县| 茂名市| 石嘴山市| 苍南县| 永顺县| 巧家县| 平和县| 清河县| 凤台县| 磐石市| 区。| 屏东市|