欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android滾動(dòng),android滾動(dòng)視圖

android 下拉滾動(dòng)頁(yè)面怎么實(shí)現(xiàn)

以下是我自己花功夫編寫(xiě)了一種非常簡(jiǎn)單的下拉刷新實(shí)現(xiàn)方案,現(xiàn)在拿出來(lái)和大家分享一下。相信在閱讀完本篇文章之后,大家都可以在自己的項(xiàng)目中一分鐘引入下拉刷新功能 最近項(xiàng)目中需要用到ListView下拉刷新的功能,一開(kāi)始想圖省事,在網(wǎng)上直接找一個(gè)現(xiàn)成的,可是嘗試了網(wǎng)上多個(gè)版本的下拉刷新之后發(fā)現(xiàn)效果都不 怎么理想。有些是因?yàn)楣δ懿煌暾蛴蠦ug,有些是因?yàn)槭褂闷饋?lái)太復(fù)雜,十全十美的還真沒(méi)找到。因此我也是放棄了在網(wǎng)上找現(xiàn)成代碼的想法,自己花功夫編寫(xiě) 了一種非常簡(jiǎn)單的下拉刷新實(shí)現(xiàn)方案,現(xiàn)在拿出來(lái)和大家分享一下。相信在閱讀完本篇文章之后,大家都可以在自己的項(xiàng)目中一分鐘引入下拉刷新功能。首先講一下實(shí)現(xiàn)原理。這里我們將采取的方案是使用組合View的方式,先自定義一個(gè)布局繼承自L(fǎng)inearLayout,然后在這個(gè)布局中加入下拉 頭和ListView這兩個(gè)子元素,并讓這兩個(gè)子元素縱向排列。初始化的時(shí)候,讓下拉頭向上偏移出屏幕,這樣我們看到的就只有ListView了。然后對(duì) ListView的touch事件進(jìn)行監(jiān)聽(tīng),如果當(dāng)前ListView已經(jīng)滾動(dòng)到頂部并且手指還在向下拉的話(huà),那就將下拉頭顯示出來(lái),松手后進(jìn)行刷新操 作,并將下拉頭隱藏。原理示意圖如下:那我們現(xiàn)在就來(lái)動(dòng)手實(shí)現(xiàn)一下,新建一個(gè)項(xiàng)目起名叫PullToRefreshTest,先在項(xiàng)目中定義一個(gè)下拉頭的布局文件pull_to_refresh/apk/res/android"xmlns:tools="schemas/tools"android:id="@+id/pull_to_refresh_head"android:layout_width="fill_parent"android:layout_height="60dip" LinearLayoutandroid:layout_width="200dip"android:layout_height="60dip"android:layout_centerInParent="true"android:orientation="horizontal" RelativeLayoutandroid:layout_width="0dip"android:layout_height="60dip"android:layout_weight="3"ImageView android:id="@+id/arrow"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:src="@drawable/arrow"/ProgressBar android:id="@+id/progress_bar"android:layout_width="30dip"android:layout_height="30dip"android:layout_centerInParent="true"android:visibility="gone"http://RelativeLayoutLinearLayoutandroid:layout_width="0dip"android:layout_height="60dip"android:layout_weight="12"android:orientation="vertical" TextViewandroid:id="@+id/description"android:layout_width="fill_parent"android:layout_height="0dip"android:layout_weight="1"android:gravity="center_horizontalbottom"android:text="@string/pull_to_refresh" /TextViewandroid:id="@+id/updated_at"android:layout_width="fill_parent"android:layout_height="0dip"android:layout_weight="1"android:gravity="center_horizontaltop"android:text="@string/updated_at" //LinearLayout/LinearLayout/RelativeLayout 在這個(gè)布局中,我們包含了一個(gè)下拉指示箭頭,一個(gè)下拉狀態(tài)文字提示,和一個(gè)上次更新的時(shí)間。當(dāng)然,還有一個(gè)隱藏的旋轉(zhuǎn)進(jìn)度條,只有正在刷新的時(shí)候我們才會(huì)將它顯示出來(lái)。布局中所有引用的字符串我們都放在stringsmit();new HideHeaderTask()/apk/res/android"xmlns:tools="schemas/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" com.example.pulltorefreshtest.RefreshableViewandroid:id="@+id/refreshable_view"android:layout_width="fill_parent"android:layout_height="fill_parent" ListViewandroid:id="@+id/list_view"android:layout_width="fill_parent"android:layout_height="fill_parent" /ListView/com.example.pulltorefreshtest.RefreshableView/RelativeLayout 可以看到,我們?cè)谧远x的RefreshableView中加入了一個(gè)ListView,這就意味著給這個(gè)ListView加入了下拉刷新的功能,就是這么簡(jiǎn)單!然后我們?cè)賮?lái)看一下程序的主Activity,打開(kāi)或新建MainActivity,加入如下代碼:復(fù)制代碼 代碼如下: public class MainActivity extends Activity {RefreshableView refreshableView;ListView listView;ArrayAdapterString adapter;String[] items = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L" };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);refreshableView = (RefreshableView) findViewById(R.id.refreshable_view);listView = (ListView) findViewById(R.id.list_view);adapter = new ArrayAdapterString(this, android.R.layout.simple_list_item_1, items);listView.setAdapter(adapter);refreshableView.setOnRefreshListener(new PullToRefreshListener() {@Overridepublic void onRefresh() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}refreshableView.finishRefreshing();}}, 0);}} 可 以看到,我們通過(guò)調(diào)用RefreshableView的setOnRefreshListener方法注冊(cè)了一個(gè)監(jiān)聽(tīng)器,當(dāng)ListView正在刷新時(shí)就 會(huì)回調(diào)監(jiān)聽(tīng)器的onRefresh方法,刷新的具體邏輯就在這里處理。而且這個(gè)方法已經(jīng)自動(dòng)開(kāi)啟了線(xiàn)程,可以直接在onRefresh方法中進(jìn)行耗時(shí)操 作,比如向服務(wù)器請(qǐng)求最新數(shù)據(jù)等,在這里我就簡(jiǎn)單讓線(xiàn)程睡眠3秒鐘。另外在onRefresh方法的最后,一定要調(diào)用RefreshableView中的 finishRefreshing方法,這個(gè)方法是用來(lái)通知RefreshableView刷新結(jié)束了,不然我們的ListView將一直處于正在刷新的 狀態(tài)。不知道大家有沒(méi)有注意到,setOnRefreshListener這個(gè)方法其實(shí)是有兩個(gè)參數(shù)的,我們剛剛也是傳入了一個(gè)不起眼的 0。那這第二個(gè)參數(shù)是用來(lái)做什么的呢?由于RefreshableView比較智能,它會(huì)自動(dòng)幫我們記錄上次刷新完成的時(shí)間,然后下拉的時(shí)候會(huì)在下拉頭中 顯示距上次刷新已過(guò)了多久。這是一個(gè)非常好用的功能,讓我們不用再自己手動(dòng)去記錄和計(jì)算時(shí)間了,但是卻存在一個(gè)問(wèn)題。如果當(dāng)前我們的項(xiàng)目中有三個(gè)地方都使 用到了下拉刷新的功能,現(xiàn)在在一處進(jìn)行了刷新,其它兩處的時(shí)間也都會(huì)跟著改變!因?yàn)樗⑿峦瓿傻臅r(shí)間是記錄在配置文件中的,由于在一處刷新更改了配置文件, 導(dǎo)致在其它兩處讀取到的配置文件時(shí)間已經(jīng)是更改過(guò)的了。那解決方案是什么?就是每個(gè)用到下拉刷新的地方,給setOnRefreshListener方法 的第二個(gè)參數(shù)中傳入不同的id就行了。這樣各處的上次刷新完成時(shí)間都是單獨(dú)記錄的,相互之間就不會(huì)再有影響。好了,全部的代碼都在這里了,讓我們來(lái)運(yùn)行一下,看看效果吧。效果看起來(lái)還是非常不錯(cuò)的。我們最后再來(lái)總結(jié)一下,在項(xiàng)目中引入ListView下拉刷新功能只需三步:1. 在Activity的布局文件中加入自定義的RefreshableView,并讓ListView包含在其中。2. 在Activity中調(diào)用RefreshableView的setOnRefreshListener方法注冊(cè)回調(diào)接口。3. 在onRefresh方法的最后,記得調(diào)用RefreshableView的finishRefreshing方法,通知刷新結(jié)束。從此以后,在項(xiàng)目的任何地方,一分鐘引入下拉刷新功能妥妥的。好了,今天的講解到此結(jié)束,有疑問(wèn)的朋友請(qǐng)?jiān)谙旅媪粞浴T创a下載,請(qǐng)點(diǎn)擊這里

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)絡(luò)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、營(yíng)口網(wǎng)站維護(hù)、網(wǎng)站推廣。

Android實(shí)現(xiàn)橫縱滾動(dòng)標(biāo)題不動(dòng)框架

用自定義標(biāo)題欄。

用自定義標(biāo)題欄,只要把系統(tǒng)自帶的標(biāo)題欄去掉就行。做法:requestWindowFeature(Window.FEATURE_NO_TITLE),自己再寫(xiě)兩個(gè)布局塊(LinearLayout布局)充當(dāng)頂部和底部的標(biāo)題欄即可,中間使用ScrollView即可完成。

如果應(yīng)用需要添加水平滾動(dòng)條,則可借助于另一個(gè)滾動(dòng)視圖HorizontalScrollView來(lái)實(shí)現(xiàn)。

android 如何讓gallery自動(dòng)滾動(dòng)?

讓gallery自動(dòng)滾動(dòng)可以通過(guò)以下兩種方法實(shí)現(xiàn):

一、使用Timer和TimerTask類(lèi)來(lái)完成圖片的自動(dòng)定時(shí)滾動(dòng):

思路:循環(huán)調(diào)用Gallery類(lèi)的onFling()方法。

代碼:

span style="white-space:pre" /spantask = new TimerTask() {

@Override

public void run() {

/**

* 參數(shù)1和2:手指在gallery上的動(dòng)作

* 參數(shù)3和4:x方向和y方向的滾動(dòng)的速度,-數(shù)表示向左滾,+數(shù)表示向右

*/

gallery.onFling(null, null, -750, 0);

}

};

timer.schedule(task, 1000, 5000);

span style="font-size:32px;"strong

/strong/span

span style="font-size:32px;"strong方式2:/strong/span

二、使用Handler消息機(jī)制完成

思路:子線(xiàn)程內(nèi)死循環(huán)使用handler每隔多長(zhǎng)時(shí)間向主線(xiàn)程發(fā)送消息,通知gallery改變位置。

代碼:

子線(xiàn)程部分:

span style="white-space:pre" new Thread(new Runnable() {

span style="white-space:pre" /spanint flag = 1;

span style="white-space:pre" /span@Override

span style="white-space:pre" /spanpublic void run() {

span style="white-space:pre" /spanwhile (isalive) {

span style="white-space:pre" /span//images為裝圖片的集合

span style="white-space:pre" /spanif ((cur_index + 1) == images.size()) {

span style="white-space:pre" /spanflag = -1;

span style="white-space:pre" /span} else if (cur_index == 0) {

span style="white-space:pre" /spanflag = 1;

span style="white-space:pre" /span}

span style="white-space:pre" /spanMessage msg = handler.obtainMessage(MSG_UPDATE, cur_index,

span style="white-space:pre" /span0);

span style="white-space:pre" /spanhandler.sendMessage(msg);

span style="white-space:pre" /spantry {

span style="white-space:pre" /spanThread.sleep(4000);

span style="white-space:pre" /span} catch (InterruptedException e) {

span style="white-space:pre" /spane.printStackTrace();

span style="white-space:pre" /span}

span style="white-space:pre" /spanswitch (flag) {

span style="white-space:pre" /spancase 1:

span style="white-space:pre" /spancur_index++;

span style="white-space:pre" /spanbreak;

span style="white-space:pre" /spancase -1:

span style="white-space:pre" /spancur_index--;

span style="white-space:pre" /spanbreak;

span style="white-space:pre" /span}

span style="white-space:pre" /span}

span style="white-space:pre" /span}

span style="white-space:pre" /span}).start();/span

主線(xiàn)程部分:

private Handler handler = new Handler() {

public void handleMessage(Message msg) {

if (msg.what == MSG_UPDATE) {

gallery.setSelection(msg.arg1);

}

}

};

兩種方式的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

使用方式1來(lái)實(shí)現(xiàn),效果和手指拖動(dòng)的效果一樣,滾動(dòng)速度可以自己調(diào)。

使用方式2來(lái)實(shí)現(xiàn),可以使用繼承Gallery的子類(lèi),重寫(xiě)onFling方法,返回false來(lái)實(shí)現(xiàn)手指拖動(dòng)時(shí)圖片只滾動(dòng)一張的效果。

缺點(diǎn):

使用方式1來(lái)實(shí)現(xiàn),當(dāng)你用手指拖動(dòng),就會(huì)發(fā)現(xiàn)圖片滾動(dòng)的太快了,不是一張一張的滾動(dòng)的,沒(méi)法使用繼承Gallery的子類(lèi),重寫(xiě)onFling方法,返回false來(lái)實(shí)現(xiàn)手

使用方式2來(lái)實(shí)現(xiàn) ,效果沒(méi)那么好看,圖片說(shuō)換就換了,沒(méi)緩沖,滾動(dòng)速度沒(méi)法控制。

android 編程怎么添加滾動(dòng)條

給TextView加上滾動(dòng)條非常簡(jiǎn)單,只需要把TextView標(biāo)簽放在ScrollView標(biāo)簽中

[html] view plain copy print?

ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"

TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/txtViewHtml" /

/ScrollView

android中怎樣得到滾動(dòng)的距離

可以設(shè)置ListView的滾動(dòng)事件

ListView.setOnScrollListener(OnScrollListener listener)

OnScrollListener是滾動(dòng)事件監(jiān)聽(tīng)接口

有兩個(gè)需要實(shí)現(xiàn)的方法

public void onScrollStateChanged(AbsListView view, int scrollState) ;

public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) ;

幾個(gè)參數(shù)的意義分別為

AbsListView view所監(jiān)聽(tīng)的listview對(duì)象

int firstVisibleItem能看見(jiàn)的第一個(gè)item的位置

int visibleItemCount能看見(jiàn)的item的數(shù)量

int totalItemCount所有item的總數(shù)

代碼如下,我們?cè)趏nScroll中進(jìn)行判斷

lvMatch.setOnScrollListener(new OnScrollListener() {

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

}

@Override

public void onScroll(AbsListView view, int firstVisibleItem,

int visibleItemCount, int totalItemCount) {

if(firstVisibleItem == 0){

//已滾動(dòng)到最頂部

}

if(firstVisibleItem+visibleItemCount == totalItemCount){

//滾動(dòng)到底部

}

}

});

Android 的屏幕滾動(dòng)操作不如 iPhone 流暢順滑,是什么原因?qū)е碌? ...

Android 的屏幕滾動(dòng)操作不如 iPhone 流暢順滑,兩者的系統(tǒng)架構(gòu)不同導(dǎo)致。

1.首先是iOS對(duì)屏幕反應(yīng)的優(yōu)先級(jí)是最高的(Touch-Media-Service-Core架構(gòu)),也就是說(shuō)用戶(hù)只要碰了屏幕,系統(tǒng)最優(yōu)先去處理屏幕顯示,然后才是其他。而安卓則是傳統(tǒng)的Application-Framework-Library(JAVA虛擬機(jī))-Kernal架構(gòu),圖形圖像處理在Library這層,優(yōu)先級(jí)不是那么高。如果系統(tǒng)負(fù)荷較高,則無(wú)暇顧及用戶(hù)觸摸的反應(yīng)。

2.其次是iOS對(duì)圖像的各種特效處理(放大、縮小、旋轉(zhuǎn)、滾動(dòng)等)都是基于GPU硬件加速的,與APP無(wú)關(guān)。這是APPLE采用封閉式硬件的優(yōu)勢(shì)。而安卓為了適應(yīng)不同的手機(jī)硬件,做不到這點(diǎn),很多APP的圖形特效都靠APP自己去進(jìn)行軟件渲染,效率低。最新的4.1已經(jīng)改進(jìn),但也無(wú)法做到所有特效都靠GPU硬件加速。

3.就是安卓的JAVA虛擬機(jī):相對(duì)iOS的Objectiv-C,JAVA天生運(yùn)行效率低下,需要占用大量?jī)?nèi)存來(lái)?yè)Q取執(zhí)行速度,而不定期的內(nèi)存自動(dòng)回收機(jī)制,直接導(dǎo)致安卓界面的卡頓現(xiàn)象,無(wú)論如何優(yōu)化也不可能改掉。2.3版安卓就是為改善此設(shè)計(jì)而發(fā)布:引入了一種新的并行內(nèi)存回收機(jī)制來(lái)減輕這種卡頓影響,但也僅僅是減輕,而無(wú)法徹底消除。也因此2.3版成為安卓重要的里程碑。

4.當(dāng)然如果android程序軟件在代碼層面存在一些明顯的bug,也會(huì)導(dǎo)致滑動(dòng)卡頓,需要更新數(shù)據(jù)的時(shí)候進(jìn)行合理的刷新。

網(wǎng)站題目:android滾動(dòng),android滾動(dòng)視圖
分享路徑:http://chinadenli.net/article40/dsggeho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)網(wǎng)站設(shè)計(jì)App開(kāi)發(fā)做網(wǎng)站Google小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)