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

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

android scrollview、horizontalscollview的scrollto方法不起作用的辦法

2019-11-06 09:39:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

當(dāng)我在使用scollview時(shí)發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,在按鈕點(diǎn)擊的事件中,我們進(jìn)行對(duì)與scollview的位置設(shè)置scollTo方法是完全ok的,但是當(dāng)我們想要在初始化過程中就進(jìn)行對(duì)scollview滑動(dòng)到的位置進(jìn)行設(shè)定時(shí),就無(wú)效了。

網(wǎng)上找了一些資料,都說(shuō)是用handler.postDelayed方法,進(jìn)行一個(gè)延遲操作,試過了之后,并沒有什么用,

由此對(duì)scollview進(jìn)行研究:

1.scrollTo() 是直接指定滾動(dòng)條的位置, 但是由于這個(gè)動(dòng)作不是單純關(guān)于 ScrollView 而已, 還要根據(jù) ScrollView 里面包含的View 的實(shí)際信息. 所以這動(dòng)作必須在頁(yè)面加載完成以后才能執(zhí)行.

2 那么如何判斷頁(yè)面加載完成呢,在activity中有這樣一個(gè)方法:

@Overridepublic void onWindowFocusChanged(boolean hasFocus) {// TODO Auto-generated method stubsuper.onWindowFocusChanged(hasFocus);if (hasFocus) {//do something 當(dāng)activity 得到或者失去焦點(diǎn)時(shí),會(huì)執(zhí)行的方法,得到焦點(diǎn)返回 true,反之}}

3.activity中頁(yè)面初始化渲染完成之后,進(jìn)行scollview位置的設(shè)定:

mScrollView.post(new Runnable() { @Override public void run() { mScrollView.scrollTo(0, 1000); // 0 代表x軸移動(dòng)的距離, 1000表示y軸移動(dòng)的距離 } });

4下面進(jìn)行源碼剖析:

scollview源碼:

/** * {@inheritDoc} * * <p>This version also clamps the scrolling to the bounds of our child. */ @Override public void scrollTo(int x, int y) { // we rely on the fact the View.scrollBy calls scrollTo. if (getChildCount() > 0) { View child = getChildAt(0); x = clamp(x, getWidth() - mPaddingRight - mPaddingLeft, child.getWidth()); y = clamp(y, getHeight() - mPaddingBottom - mPaddingTop, child.getHeight()); if (x != mScrollX || y != mScrollY) { super.scrollTo(x, y); } } }

它的父類View:

public void scrollTo(int x, int y) { if (mScrollX != x || mScrollY != y) { int oldX = mScrollX; int oldY = mScrollY; mScrollX = x; mScrollY = y; onScrollChanged(mScrollX, mScrollY, oldX, oldY); if (!awakenScrollBars()) { invalidate(); } } }

由此可見:

if (mScrollX != x || mScrollY != y) 這個(gè)判斷語(yǔ)句有沒有通過是關(guān)鍵所在. 這也間接說(shuō)明了, 在Activity 沒初始化完成, ScrollView 對(duì)象獲取的一些信息是不準(zhǔn)確的, 直接導(dǎo)致了scrollTo() 方法無(wú)效.

5.于是我們得出結(jié)論,要想在初始化中設(shè)置horizontalscollview的位置,需要在activity頁(yè)面渲染完成之后,進(jìn)行設(shè)置,也就是在onWindowFocusChanged 方法中設(shè)置偏移位置,則生效。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广南县| 东方市| 辰溪县| 广西| 平昌县| 芮城县| 民丰县| 新竹县| 巴彦县| 德安县| 西平县| 广平县| 门头沟区| 东乌| 墨竹工卡县| 临西县| 宣恩县| 徐州市| 依兰县| 东辽县| 枞阳县| 张家川| 茂名市| 大城县| 南部县| 邮箱| 苏州市| 城市| 滕州市| 重庆市| 曲阳县| 桦甸市| 青浦区| 营口市| 云林县| 兴山县| 莒南县| 昭通市| 武邑县| 民勤县| 广西|