版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】PullToRefreshScrollView+GridView,實(shí)現(xiàn)向下滑動(dòng)中隱藏自定義Action布局
最近電商類項(xiàng)目有個(gè)需求挺頭疼,要求用GridView去顯示商品,滑動(dòng)到底部下拉能加載更多商品,向下滑動(dòng)過程中需要隱藏掉自定義的Action布局,向上滑動(dòng)能顯示出來,整體效果類似淘寶APP搜索結(jié)果頁(yè)那樣。
起初覺得挺簡(jiǎn)單的,但是后來才發(fā)現(xiàn)還是得轉(zhuǎn)一點(diǎn)腦子。最開始我想用PullToRefreshGridView,但是后來發(fā)現(xiàn)GridView沒有添加headview的方法,只能采用PullToRefreshScrollView內(nèi)嵌套GridView的方法,Scrollview里多放一個(gè)空白布局當(dāng)GridView的headview,高度和Action布局一樣就行。這時(shí)還有一個(gè)問題,ScrollView和GridView會(huì)產(chǎn)生滑動(dòng)沖突,還好網(wǎng)上很容易找到解決辦法,我這里采用自定義GridView,最后就是監(jiān)聽方法了,最為關(guān)鍵的點(diǎn),還是直接上代碼吧:自定義GridView:packagecom.example.ztestscrollview;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.view.View.MeasureSpec;importandroid.widget.GridView;publicclassMyGridViewextendsGridView{publicMyGridView(Contextcontext,AttributeSetattrs){
super(context,attrs);}publicMyGridView(Contextcontext){
super(context);}publicMyGridView(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);}@Override
publicvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,expandSpec);}
}主界面:packagecom.example.ztestscrollview;importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.Menu;importandroid.view.MotionEvent;importandroid.view.View;importandroid.view.View.OnTouchListener;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ScrollView;importcom.handmark.pulltorefresh.library.PullToRefreshBase;importcom.handmark.pulltorefresh.library.PullToRefreshBase.Mode;importcom.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;importcom.handmark.pulltorefresh.library.PullToRefreshScrollView;publicclassMainActivityextendsActivity{
intnum=10;
privateGridAdapteradapter;
privateScrollViewscrollView;
privatePullToRefreshScrollViewptr_scrollview;
privateViewactionLayout;
privateMyGridViewmyGridview;
@Override
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionLayout=findViewById(R.id.actionlayout);
ptr_scrollview=(PullToRefreshScrollView)findViewById(R.id.ptr_scrollview);
ptr_scrollview.setMode(Mode.PULL_UP_TO_REFRESH);
ptr_scrollview.setOnRefreshListener(newOnRefreshListener<ScrollView>()
{
@Override
publicvoidonRefresh(PullToRefreshBase<ScrollView>refreshView)
{
num+=10;
adapter.notifyDataSetChanged();
ptr_scrollview.onRefreshComplete();
}
});
myGridview=(MyGridView)findViewById(R.id.myGridView1);
adapter=newGridAdapter();
myGridview.setAdapter(adapter);
scrollView=ptr_scrollview.getRefreshableView();
scrollView.setOnTouchListener(newOnTouchListener()
{
//判斷是否第一個(gè)滑動(dòng)值
booleanisFirst=true;
//Scrollview滑動(dòng)的ScrollY值
privateintScrollY_Move;
//第一個(gè)滑動(dòng)的ScrollY值
privateintFirst_ScrollY_Move;
//手指抬起時(shí)ScrollY值
privateintScrollY_Up;
//ScrollY_Move和First_ScrollY_Move的差值
privateintCha;
@Override
publicbooleanonTouch(Viewv,MotionEventevent)
{
switch(event.getAction())
{
//ACTIN_DOWN沒用,不用監(jiān)聽
caseMotionEvent.ACTION_MOVE:
if(isFirst)
{
//記錄下第一個(gè)滑動(dòng)的ScrollY值
First_ScrollY_Move=v.getScrollY();
isFirst=false;
}
//記錄下Scrollview滑動(dòng)的ScrollY值
ScrollY_Move=v.getScrollY();
//計(jì)算出ScrollY_Move和First_ScrollY_Move的差值
Cha=ScrollY_Move-First_ScrollY_Move;
//當(dāng)ScrollY_Move>First_ScrollY_Move時(shí)證明滑動(dòng)方向是向下;
//加上判斷差值的目的:當(dāng)Actionbar顯示的時(shí)候,手指按住往下滑過一段距離還未抬起時(shí),Actionbar也能隱藏
if(First_ScrollY_Move<ScrollY_Move||Cha>200)
{
//隱藏Actionbar
actionLayout.setVisibility(View.GONE);
}
//當(dāng)ScrollY_Move<First_ScrollY_Move時(shí)證明滑動(dòng)方向是向上;
//加上判斷差值的目的:當(dāng)Actionbar顯示的時(shí)候,手指按住往上滑過一段距離還未抬起時(shí),Actionbar也能顯示
//判斷ScrollY_Move<150目的:當(dāng)Scrollview滑動(dòng)接近頂端時(shí)必須顯示Actionbar
elseif(First_ScrollY_Move>ScrollY_Move||Cha<-200
||ScrollY_Move<150)
{
actionLayout.setVisibility(View.VISIBLE);
}
break;
caseMotionEvent.ACTION_UP:
ScrollY_Up=v.getScrollY();//記錄下手指抬起時(shí)ScrollY值
isFirst=true;//將isFirst還原為初始化
if(ScrollY_Up==0)
{
actionLayout.setVisibility(View.VISIBLE);
}
//Log.e("ACTION_UP>","scrollY_up:"+scrollY_up+"
"
//+"eventY_up:"+eventY_up);
break;
default:
break;
}
returnfalse;
}
});
}
classGridAdapterextendsBaseAdapter
{
@Override
publicViewgetView(intposition,ViewconvertView,ViewGroupparent)
{
Viewinflate=getLayoutInflater().inflate(R.layout.griditem,null);
returninflate;
}
@Override
publicintgetCount()
{
//TODOAuto-generatedmethodstub
returnnum;
}
@Override
publicObjectgetItem(intposition)
{
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publiclonggetItemId(intposition)
{
//TODOAuto-generatedmethodstub
return0;
}
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu)
{
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.main,menu);
returntrue;
}}布局:<RelativeLayoutxmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
android:id="@+id/ptr_scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<RelativeLayout
android:id="@+id/headview"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true">
</RelativeLayout>
<com.example.ztestscrollview.MyGridView
android:id="@+id/myGridView1"
android:layout_width="match_parent"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國(guó)藥用塑料瓶市場(chǎng)競(jìng)爭(zhēng)格局與投資策略深度調(diào)查研究報(bào)告
- 2026年叉車基礎(chǔ)考試題庫(kù)含答案
- 2026年叉車安全法考試題庫(kù)及答案(有一套)
- 2026年叉車安全考試試題及完整答案一套
- 2026年叉車操作教學(xué)考試題庫(kù)及完整答案一套
- 2026年叉車機(jī)電考試題庫(kù)及完整答案一套
- 2026年叉車測(cè)試題庫(kù)帶答案
- 2026年叉車?yán)碚摐y(cè)試題庫(kù)帶答案
- 2026年叉車貨車安全培訓(xùn)試題庫(kù)及參考答案1套
- 2025-2030亞洲BC行業(yè)現(xiàn)代供需格局及未來前景規(guī)劃分析研究報(bào)告
- 2025年總經(jīng)理安全生產(chǎn)責(zé)任書
- 殘疾人職業(yè)技能培訓(xùn)方案
- 幼兒冬季飲食保健知識(shí)
- 教育授權(quán)協(xié)議書范本
- 放射科CT檢查造影劑使用要點(diǎn)
- 獨(dú)立儲(chǔ)能項(xiàng)目竣工驗(yàn)收方案
- 中職無人機(jī)測(cè)繪課件
- 輸入性瘧疾宣傳課件
- 工藝聯(lián)鎖-報(bào)警管理制度
- 基層醫(yī)療人員個(gè)人工作自查報(bào)告范文
- 中國(guó)舞蹈史唐代舞蹈課件
評(píng)論
0/150
提交評(píng)論