日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android滑屏 mScrollX mScrollY scrollTo() scrollBy()

發布時間:2024/4/15 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android滑屏 mScrollX mScrollY scrollTo() scrollBy() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先 ,我們必須明白在Android View視圖是沒有邊界的,Canvas是沒有邊界的,只不過我們通過繪制特定的View時對

???Canvas對象進行了一定的操作,例如 : translate(平移)、clipRect(剪切)等,以便達到我們的對該Canvas對象繪制的要求 ,

???我們可以將這種無邊界的視圖稱為“視圖坐標”-----它不受物理屏幕限制。通常我們所理解的一個Layout布局文件只是該視

???圖的顯示區域,超過了這個顯示區域將不能顯示到父視圖的區域中 ,對應的,我們可以將這種無邊界的視圖稱為“布局坐標

????------ 父視圖給子視圖分配的布局(layout)大小。 而且, 一個視圖的在屏幕的其實坐標位于視圖坐標起始處,如下圖所示。

?

???????? 這么來說吧 ,世界本是無邊無界的,可是我們的眼睛我們的心約束了我們所看到的“世界” 。

?

??? ?? 如下所示:

?????????????

??????????????

????????????? 黑色框框表示該子視圖的布局坐標, 褐色框框表示該子視圖的視圖坐標--該坐標是無限的,超過了父視圖給子視圖

?????? 規定的區域后,不再顯示該超出內容。

?

??? ?? ? ?那么下面的問題就是:如何將我們的視圖的任意坐標能顯示到該視圖的中心坐標上呢? 由于該布局位置是只能顯示特定的

? 一塊視圖內容 ,因此我們需要通過scrollTo()或者scrollBy()方法將我們期望的視圖“滾動”至布局坐標上。

?

????? 在View.java中提供了了如下兩個變量以及相應的屬性方法去讀取滾動值 ,如下: View.java類中???

01 /**
02 ?????* The offset, in pixels, by which the content of this view is scrolled
03 ?????* horizontally.
04 ?????* {@hide}
05 ?????*/
06 ????protected?int?mScrollX;???//該視圖內容相當于視圖起始坐標的偏移量?? , X軸 方向
07 ????/**
08 ?????* The offset, in pixels, by which the content of this view is scrolled
09 ?????* vertically.
10 ?????* {@hide}
11 ?????*/
12 ????protected?int?mScrollY;???//該視圖內容相當于視圖起始坐標的偏移量?? , Y軸方向
13 ?
14 ????/**
15 ?????* Return the scrolled left position of this view. This is the left edge of
16 ?????* the displayed part of your view. You do not need to draw any pixels
17 ?????* farther left, since those are outside of the frame of your view on
18 ?????* screen.
19 ?????*
20 ?????* @return The left edge of the displayed part of your view, in pixels.
21 ?????*/
22 ????public?final?int?getScrollX() {
23 ????????return?mScrollX;
24 ????}
25 ?
26 ????/**
27 ?????* Return the scrolled top position of this view. This is the top edge of
28 ?????* the displayed part of your view. You do not need to draw any pixels above
29 ?????* it, since those are outside of the frame of your view on screen.
30 ?????*
31 ?????* @return The top edge of the displayed part of your view, in pixels.
32 ?????*/
33 ????public?final?int?getScrollY() {
34 ????????return?mScrollY;
35 ????}


?

??????注意,所謂的“by which the content of this view is scrolled”表示該偏移量只針對于該View中onDraw()方法里的

??具體內容實現,而不針對背景圖片等 。具體原因可參考<Android中View繪制流程以及invalidate()等相關方法分析>

?

?????提示:下文中提到的當前視圖內容是在繪制在布局坐標處的內容。

?

?????public void?scrollTo(int x, int y)

????????????? 說明:在當前視圖內容偏移至(x , y)坐標處,即顯示(可視)區域位于(x , y)坐標處。

??????? 方法原型為: View.java類中

查看源碼 打印?
01 /**
02 ?* Set the scrolled position of your view. This will cause a call to
03 ?* {@link #onScrollChanged(int, int, int, int)} and the view will be
04 ?* invalidated.
05 ?* @param x the x position to scroll to
06 ?* @param y the y position to scroll to
07 ?*/
08 public?void?scrollTo(int?x,?int?y) {
09 ????//偏移位置發生了改變
10 ????if?(mScrollX != x || mScrollY != y) {
11 ????????int?oldX = mScrollX;
12 ????????int?oldY = mScrollY;
13 ????????mScrollX = x;??//賦新值,保存當前便宜量
14 ????????mScrollY = y;
15 ????????//回調onScrollChanged方法
16 ????????onScrollChanged(mScrollX, mScrollY, oldX, oldY);
17 ????????if?(!awakenScrollBars()) {
18 ????????????invalidate();??//一般都引起重繪
19 ????????}
20 ????}
21 }

?

?????public voidscrollBy(int x, int y)? ??

??????????? 說明:在當前視圖內容繼續偏移(x , y)個單位,顯示(可視)區域也跟著偏移(x,y)個單位。

??????? 方法原型為: View.java類中

01 /**
02 ???* Move the scrolled position of your view. This will cause a call to
03 ???* {@link #onScrollChanged(int, int, int, int)} and the view will be
04 ???* invalidated.
05 ???* @param x the amount of pixels to scroll by horizontally
06 ???* @param y the amount of pixels to scroll by vertically
07 ???*/
08 ??// 看出原因了吧 。。 mScrollX 與 mScrollY 代表我們當前偏移的位置 , 在當前位置繼續偏移(x ,y)個單位
09 ??public?void?scrollBy(int?x,?int?y) {
10 ??????scrollTo(mScrollX + x, mScrollY + y);
11 ??}


????????

?????????????

?????? 第一個小Demo非常簡單 ,大家重點理解與掌握scrollTo() 與 scrollBy()函數的用法和區別。

?

????? ?第二個小Demo則有了Launcher的模樣,能夠左右切換屏幕 。實現功能如下: 采用了一個自定義ViewGroup,該ViewGroup

?? 對象包含了3個LinearLayout子視圖,并且以一定的布局坐標(由layout()方法指定)顯示在ViewGroup上。 接下來,即可調用該

???ViewGroup對象的scrollTo或者scrollBy()方法切換指定視圖內容了,即切換屏幕。 呵呵 ,挺好玩的吧 。

?

?????? 如果對View繪制流程不懂的,可以參考我的這篇博客<Android中View繪制流程以及invalidate()等相關方法分析> 。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Android滑屏 mScrollX mScrollY scrollTo() scrollBy()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产aaaaa毛片 | 黄色小网站在线观看 | 在线看国产精品 | 国产精品扒开做爽爽爽的视频 | 国产黄色激情视频 | 神马久久久久 | 人人爽人人爽人人爽 | 欧美日韩亚洲成人 | 无码人妻丰满熟妇啪啪网站 | 国产精品视频大全 | 午夜精品在线观看 | 亚洲天堂网一区二区 | 亚洲天堂免费观看 | 日韩欧美卡一卡二 | 麻豆一区二区在线 | 欧美成人精品激情在线观看 | 日本美女毛片 | 久草高清视频 | 日本孕妇孕交 | 成人在线精品视频 | 久久久久久国产精品免费 | 性一交一乱一精一晶 | 亚洲九九 | 日本在线视频一区二区 | www.日韩在线观看 | 国产成人自拍网站 | 日韩欧美偷拍 | 日韩av一区二区三区四区 | 亚洲一片| 操啊操| 男女做激情爱呻吟口述全过程 | 永久久久久久 | 免费成人美女女 | 国产妇女乱一性一交 | av中字在线| 青青视频网 | 超碰免费av| 日韩精品一区不卡 | 久久午夜精品人妻一区二区三区 | 九九久视频 | 亚洲精品无码成人 | 永久免费在线观看av | 一二三区在线视频 | 久久精品国产亚洲a | 中文字幕av专区 | 日本网站在线 | 久久久久久久一区二区三区 | 亚洲中文无码av在线 | 91在线观看免费视频 | 免费激情网站 | 噜噜色网 | 色老头一区二区三区在线观看 | 成人一级在线 | 国产乱淫a∨片免费观看 | 欧美性生活一区二区 | 99热18| 日韩一及片 | www插插插| 日韩一级影片 | 黑丝av在线 | www夜插内射视频网站 | 国产午夜免费 | 少妇真实被内射视频三四区 | 寻找身体恐怖电影免费播放 | 青青草华人在线 | 久久久久久久久久久丰满 | 日批国产 | 男人操女人的网站 | www.毛片 | 啪啪自拍视频 | 香蕉久久av一区二区三区 | 你懂的在线视频网站 | 国产山村乱淫老妇女视频 | 97视频免费在线 | 久久香蕉热 | 亚洲欧美在线观看视频 | 狠狠97 | 日本一级黄色录像 | 免费在线观看一区二区三区 | 亚洲一级黄色大片 | 日日操日日爽 | 新天堂网 | 青青青在线免费 | 日本免费一区二区三区四区五六区 | 91天天综合 | 国产一区二区小视频 | 欧美日本韩国一区二区 | 校花被c到呻吟求饶 | 久久精品国产一区 | 久久裸体视频 | www.精品在线 | 插插操操 | 日韩黄色三级视频 | 久久影视网| 国产视频一区二区三区在线播放 | 99ri国产 | 日韩av在线免费 | 久久艹艹| 麻豆91精品 |