国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2019-10-22 18:17:34
字體:
供稿:網(wǎng)友

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)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁明县| 沙洋县| 潞城市| 绩溪县| 徐水县| 金溪县| 伊宁市| 凤翔县| 即墨市| 留坝县| 遂昌县| 高陵县| 兴城市| 衡阳县| 济源市| 綦江县| 莎车县| 航空| 耿马| 博湖县| 宝清县| 呼伦贝尔市| 分宜县| 龙川县| 丽江市| 鹤岗市| 永顺县| 许昌县| 侯马市| 清新县| 岗巴县| 崇礼县| 秭归县| 娄底市| 瑞安市| 太仆寺旗| 肇东市| 虎林市| 崇礼县| 阳西县| 眉山市|