chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在鴻蒙中如何實(shí)現(xiàn)一屏多頁(yè)

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:鴻蒙技術(shù)社區(qū) ? 作者:開鴻HOS小鴻 ? 2021-09-28 09:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

眾所周知,PageSlider 是用于頁(yè)面之間切換的組件,它通過(guò)響應(yīng)滑動(dòng)事件完成頁(yè)面間的切換,而 PageFlipper 可能知道的人就比較少了。

其實(shí) PageFlipper 和 PageSlider 類似,都是視圖切換組件,它們都繼承自 StackLayout,因此可以將多個(gè) component 層疊在一起,每次只顯示一個(gè)組件。

當(dāng)視圖從一個(gè) component 切換到另一個(gè) component 時(shí),PageFlipper 支持指定動(dòng)畫效果。

區(qū)別:

PageFlipper 通過(guò) addComponent() 添加 component,可使用動(dòng)畫控制多個(gè) component 之間的切換效果,是個(gè)輕量級(jí)的組件,適合展示少量靜態(tài)數(shù)據(jù)。

而 PageSlide 是由 provider 來(lái)提供 component 的,更適用復(fù)雜的視圖切換,實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)加載。

下面是一個(gè) PageSlider 和 PageFlipper 結(jié)合起來(lái)的使用效果,頁(yè)面中間的卡片使用的是 PageSlider,背景圖片和底部的數(shù)字指示器用的是 PageFlipper。

PageSlider

PageSlider 可以說(shuō)是鴻蒙中最常用的視圖切換組件了,使用方法不用多做介紹,官方文檔有詳細(xì)的說(shuō)明,這里主要說(shuō)一下一個(gè)特殊的效果。

①一屏多頁(yè)效果

其實(shí)鴻蒙本身有提供一個(gè) setClipEnabled() 的方法,作用是設(shè)置是否允許在組件超出其父布局時(shí)自動(dòng)裁剪組件。

理論上通過(guò)給 pageSlider 父布局設(shè)置 setClipEnabled(false),加上給子組件設(shè)置合適的寬度可以實(shí)現(xiàn)一屏多頁(yè)效果,但是經(jīng)過(guò)測(cè)試并沒達(dá)到效果。

這個(gè)方法我也單獨(dú)拿出來(lái)在其他場(chǎng)景驗(yàn)證過(guò)確實(shí)無(wú)效,下面是驗(yàn)證的效果。

但是鴻蒙卻提供了另外一個(gè)方法 setPageMargin(),它的作用是設(shè)置 PageSlider 中子組件邊距的,當(dāng)傳入一個(gè)合適的負(fù)數(shù)時(shí)(必須是負(fù)數(shù)),就能實(shí)現(xiàn)一屏同時(shí)顯示多個(gè)子組件的效果:

②動(dòng)態(tài)設(shè)置縮放透明度變化

設(shè)置透明度和縮放比例就不細(xì)說(shuō)了,主要就是在 PageSlider 子組件加載完成后和頁(yè)面切換中的回調(diào)方法中改變 alpha 值和 scale 值。

直接上代碼:

public final class AlphaScalePageTransformer {

/**

* 縮放

*/

public static final float INACTIVE_SCALE = 0.8f;

/**

* 透明度

*/

public static final float INACTIVE_ALPHA = 0.5f;

/**

* 設(shè)置初始狀態(tài)的縮放和透明度

*

* @param child

* @param position

* @param current

*/

public static void defaultPage(ListContainer child, int position, float current) {

if (position != current) {

child.setAlpha(INACTIVE_ALPHA);

child.setScaleX(INACTIVE_SCALE);

child.setScaleY(INACTIVE_SCALE);

}

}

/**

* 設(shè)置滑動(dòng)中的縮放和透明度

*

* @param childList

* @param position

* @param offset

* @param direction

*/

public static void transformPage(List《ListContainer》 childList, int position, float offset, float direction) {

Component child = childList.get(position);

float scale = INACTIVE_SCALE + (1 - INACTIVE_SCALE) * (1 - Math.abs(offset));

float alpha = INACTIVE_ALPHA + (1 - INACTIVE_ALPHA) * (1 - Math.abs(offset));

child.setScaleX(scale);

child.setScaleY(scale);

child.setAlpha(alpha);

if (direction 》 0) {

if (position 《 childList.size() - 1) {

child = childList.get(position + 1);

}

} else {

if (position 》= 1) {

child = childList.get(position - 1);

}

}

scale = INACTIVE_SCALE + (1 - INACTIVE_SCALE) * Math.abs(offset);

alpha = INACTIVE_ALPHA + (1 - INACTIVE_ALPHA) * Math.abs(offset);

child.setScaleX(scale);

child.setScaleY(scale);

child.setAlpha(alpha);

}

}

設(shè)置兩邊的 component 透明度和縮放效果:

//設(shè)置初始狀態(tài)縮放和透明度

AlphaScalePageTransformer.defaultPage(image, i, pageSlider.getCurrentPage());

//設(shè)置頁(yè)面切換中縮放和透明度

pageSlider.addPageChangedListener(new PageChangedListener() {

@Override

public void onPageSliding(int position, float positionOffset, int positionOffsetPixels) {

AlphaScalePageTransformer.transformPage(listContainers, position,

positionOffset, positionOffsetPixels);

}

});

PageFlipper(翻頁(yè)器)

PageFlipper 是一個(gè)翻頁(yè)器,當(dāng)它有兩個(gè)或多個(gè)子組件時(shí),切換過(guò)程中可以輕松設(shè)置入場(chǎng)動(dòng)畫和出場(chǎng)動(dòng)畫,以達(dá)到意想不到的效果。

雖然 PageFlipper 的使用率遠(yuǎn)不及 PageSlider,但這并不意味著 PageFlipper 就不強(qiáng)大。

他能通過(guò)簡(jiǎn)單的代碼實(shí)現(xiàn)許多動(dòng)畫效果,比如淘寶頭條的效果,日歷翻頁(yè)效果,背景圖淡入淡出效果等等。

常用方法:

getCurrentComponent()//獲取當(dāng)前組件

showNext():顯示下一個(gè)組件(如果當(dāng)前子組件是最后一個(gè),則顯示第一個(gè)子組件)

showPrevious():顯示上一個(gè)組件(如果當(dāng)前子組件是第一個(gè),則顯示最后一個(gè)子組件)

getFlipInterval() :獲取自動(dòng)翻轉(zhuǎn)時(shí)間

setFlipPeriod(int period) :設(shè)置翻轉(zhuǎn)周期

startFlipping() :開啟自動(dòng)翻轉(zhuǎn)

stopFlipping() :停止自動(dòng)翻轉(zhuǎn)

addComponent() :添加組件

setIncomingAnimationA() :設(shè)置轉(zhuǎn)入動(dòng)畫

setOutgoingAnimation() :設(shè)置轉(zhuǎn)出動(dòng)畫

下面通過(guò)設(shè)置文字翻頁(yè)效果來(lái)了解下它的使用方法:

代碼如下:

public class IndicatorComponent extends DirectionalLayout {

/**

* 文字大小

*/

private static final int TEXT_SIZE = 130;

/**

* 動(dòng)畫時(shí)長(zhǎng)

*/

private static final int DURATION = 600;

private PageFlipper textSwitcher;

private Text textcomponent;

/**

* ItemsCountcomponent

*

* @param context

* @param attrSet

*/

public IndicatorComponent(Context context, AttrSet attrSet) {

super(context, attrSet);

init(context);

}

private void init(Context context) {

setOrientation(ComponentContainer.HORIZONTAL);

textSwitcher = new PageFlipper(context);

//理論上PageFlipper只需要添加兩個(gè)子component就能實(shí)現(xiàn)動(dòng)畫效果,但是實(shí)際測(cè)試發(fā)現(xiàn)如果切換速度太快就導(dǎo)致子組件銜接不上出現(xiàn)組件消失的額情況,

//因此這里通過(guò)實(shí)踐多添加了幾個(gè)子component,防止滑動(dòng)過(guò)快出現(xiàn)bug

textSwitcher.addComponent(createcomponentForTextSwitcher(context));

textSwitcher.addComponent(createcomponentForTextSwitcher(context));

textSwitcher.addComponent(createcomponentForTextSwitcher(context));

textSwitcher.addComponent(createcomponentForTextSwitcher(context));

addComponent(textSwitcher, new LayoutConfig(ComponentContainer.LayoutConfig.MATCH_CONTENT,

ComponentContainer.LayoutConfig.MATCH_CONTENT));

textcomponent = new Text(context);

textcomponent.setTextSize(TEXT_SIZE);

textcomponent.setFont(Font.DEFAULT_BOLD);

textcomponent.setTextColor(new Color(Color.getIntColor(“#8cffffff”)));

addComponent(textcomponent, new LayoutConfig(ComponentContainer.LayoutConfig.MATCH_CONTENT,

ComponentContainer.LayoutConfig.MATCH_CONTENT));

}

/**

* 創(chuàng)建組件

*

* @param context 上下文

* @return text

*/

private Text createcomponentForTextSwitcher(Context context) {

Text text = new Text(context);

text.setTextSize(TEXT_SIZE);

text.setFont(Font.DEFAULT_BOLD);

text.setTextColor(Color.WHITE);

text.setLayoutConfig(new PageFlipper.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_CONTENT,

PageFlipper.LayoutConfig.MATCH_CONTENT));

return text;

}

/**

* update

*

* @param newPosition 新位置

* @param oldPosition 舊位置

* @param totalElements 總數(shù)

*/

public void update(int newPosition, int oldPosition, int totalElements) {

textcomponent.setText(“ / ” + totalElements);

int offset = textSwitcher.getHeight();

if (newPosition 》 oldPosition) {

//設(shè)置組件進(jìn)入和退出的動(dòng)畫

textSwitcher.setIncomingAnimation(createPositionAnimation(-offset, 0, 0f, 1f, DURATION));

textSwitcher.setOutgoingAnimation(createPositionAnimation(0, offset, 1f, 0f, DURATION));

} else if (oldPosition 》 newPosition) {

textSwitcher.setIncomingAnimation(createPositionAnimation(offset, 0, 0f, 1f, DURATION));

textSwitcher.setOutgoingAnimation(createPositionAnimation(0, -offset, 1f, 0f, DURATION));

}

//顯示下一個(gè)組件并執(zhí)行動(dòng)畫

textSwitcher.showNext();

Text text = (Text) textSwitcher.getCurrentComponent();

text.setText(String.valueOf(newPosition + 1));

}

/**

* 創(chuàng)建屬性動(dòng)畫

*

* @param fromY

* @param toY

* @param fromAlpha

* @param toAlpha

* @param duration

* @return

*/

private AnimatorProperty createPositionAnimation(int fromY, int toY, float fromAlpha, float toAlpha, int duration) {

AnimatorProperty animatorProperty = new AnimatorProperty();

animatorProperty.setCurveType(Animator.CurveType.DECELERATE);

animatorProperty.alphaFrom(fromAlpha);

animatorProperty.alpha(toAlpha);

animatorProperty.moveFromY(fromY);

animatorProperty.moveToY(toY);

animatorProperty.setDuration(duration);

return animatorProperty;

}

}

結(jié)束

以上主要介紹了 PageSlider 和 PageFlipper 的一些簡(jiǎn)單使用,最后補(bǔ)充一個(gè)小功能,設(shè)置漸變效果,這個(gè)簡(jiǎn)單的效果可能很多人還不知道如何設(shè)置。

首先生成一個(gè) foreground_gradient.xml:

《shape

xmlns:ohos=“http://schemas.huawei.com/res/ohos”

ohos:shape=“rectangle”》

//設(shè)置填充的顏色,可以根據(jù)實(shí)際需要設(shè)置多個(gè)

《solid

ohos:colors=“#000000,#00ffffff,#d8000000”/》

//設(shè)置漸變方向,有三個(gè)值可供選擇:linear_gradient,radial_gradient,sweep_gradient

《gradient

ohos:shader_type=“l(fā)inear_gradient”

/》《/shape》

然后給目標(biāo)組件設(shè)置前景色即可:

ohos:foreground_element=“$graphic:foreground_gradient”

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    69013
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2141

    瀏覽量

    35024

原文標(biāo)題:在鴻蒙上實(shí)現(xiàn)一屏多頁(yè)效果!

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AcrelEMS-EDU:一屏掌控高校能源,驅(qū)動(dòng)綠色校園智慧轉(zhuǎn)型

    優(yōu)化資源配置,推動(dòng)節(jié)能降耗與綠色校園建設(shè)。 、全局掌控:一屏縱覽能源脈動(dòng) 一屏縱覽全校能源脈搏。通過(guò)動(dòng)態(tài)圖表實(shí)時(shí)展示各校區(qū)教學(xué)樓、實(shí)驗(yàn)室、宿舍等區(qū)域的用電、用水總量,支持能耗折算與趨勢(shì)分析,清晰呈現(xiàn)日、周用能變化,讓管理者快速
    的頭像 發(fā)表于 09-17 23:16 ?524次閱讀
    AcrelEMS-EDU:<b class='flag-5'>一屏</b>掌控高校能源,驅(qū)動(dòng)綠色校園智慧轉(zhuǎn)型

    【節(jié)能學(xué)院】搞定校區(qū)、滿足需求!AcrelEMS-EDU成高校綜合能源管理 “硬核幫手”

    建設(shè)。、全局掌控:一屏縱覽能源脈動(dòng)一屏縱覽全校能源脈搏。通過(guò)動(dòng)態(tài)圖表實(shí)時(shí)展示各校區(qū)教學(xué)樓、實(shí)驗(yàn)室、宿舍等區(qū)域的用電、用水總量,支持能耗折算與趨勢(shì)分析,清晰呈現(xiàn)日、
    的頭像 發(fā)表于 08-28 08:05 ?296次閱讀
    【節(jié)能學(xué)院】搞定<b class='flag-5'>多</b>校區(qū)、滿足<b class='flag-5'>多</b>需求!AcrelEMS-EDU成高校綜合能源管理 “硬核幫手”

    淘寶API跨平臺(tái)數(shù)據(jù)同步,店管理一屏搞定!

    ? 痛點(diǎn):平臺(tái)數(shù)據(jù)孤島 當(dāng)商家同時(shí)淘寶、天貓、抖音等平臺(tái)運(yùn)營(yíng)店鋪時(shí),常面臨: 庫(kù)存數(shù)據(jù)不同步導(dǎo)致超賣 訂單分散多個(gè)后臺(tái),處理效率低 商品信息需重復(fù)編輯 銷售報(bào)表需人工匯總 解決方案:API數(shù)據(jù)
    的頭像 發(fā)表于 07-30 14:41 ?330次閱讀
    淘寶API跨平臺(tái)數(shù)據(jù)同步,<b class='flag-5'>多</b>店管理<b class='flag-5'>一屏</b>搞定!

    鴻蒙Next實(shí)現(xiàn)瀑布流布局

    高度或?qū)捀弑?,減少動(dòng)態(tài)測(cè)量開銷 合理實(shí)現(xiàn)懶加載:對(duì)于非首內(nèi)容或圖片資源,定要實(shí)現(xiàn)懶加載 漸進(jìn)式增強(qiáng)體驗(yàn):先確?;A(chǔ)功能可用,再添加動(dòng)畫和交互效果 測(cè)試與優(yōu)化:
    發(fā)表于 06-10 14:17

    開源鴻蒙生態(tài)分論壇圓滿舉辦

    近日,開源鴻蒙開發(fā)者大會(huì)2025(OHDC.2025)深圳成功舉辦。主論壇上隆重舉行了“開源鴻蒙TV SIG”成立儀式,開源鴻蒙TV S
    的頭像 發(fā)表于 06-05 15:27 ?903次閱讀

    鴻蒙5開發(fā)寶藏案例分享---自由流轉(zhuǎn)的拖拽聯(lián)動(dòng)

    ? 【干貨預(yù)警】鴻蒙開發(fā)寶藏案例大揭秘!手把手教你玩轉(zhuǎn)常用功能**?** 大家好呀~,今天扒拉鴻蒙文檔的時(shí)候,突然發(fā)現(xiàn)官方竟然藏了堆超實(shí)用的開發(fā)案例! ?** 之前總覺得
    發(fā)表于 06-03 18:50

    鴻蒙5開發(fā)寶藏案例分享---多開發(fā)實(shí)例(地圖導(dǎo)航)

    ,歡迎評(píng)論區(qū)扔需求~ 下期準(zhǔn)備扒拉「智能家居跨設(shè)備聯(lián)動(dòng)」的實(shí)戰(zhàn)案例,想看的同學(xué)記得三連催更! #HarmonyOS #鴻蒙開發(fā) #一多適配 #實(shí)戰(zhàn)教程
    發(fā)表于 06-03 16:17

    鴻蒙5開發(fā)寶藏案例分享---多開發(fā)實(shí)例(圖片美化)

    ?【鴻蒙開發(fā)寶藏案例分享】次搞定多端適配的圖片美化應(yīng)用開發(fā)思路!? Hey小伙伴們~ 今天鴻蒙文檔時(shí)挖到個(gè)超實(shí)用的大寶藏!原來(lái)官方早
    發(fā)表于 06-03 16:09

    鴻蒙5開發(fā)寶藏案例分享---折疊懸停態(tài)開發(fā)實(shí)踐

    HarmonyOS早就準(zhǔn)備好了超實(shí)用案例,今天必須帶大家解鎖\"懸停態(tài)\"開發(fā)的正確姿勢(shì),手慢無(wú)哦~ ?** 先來(lái)點(diǎn)干貨:什么是懸停態(tài)?** 就是把折疊像筆記本電腦那樣半折立桌上
    發(fā)表于 06-03 12:04

    Aqara 智能溫控器 W400 震撼上市:一屏開啟全屋智慧溫控新時(shí)代

    設(shè)備,為用戶帶來(lái)高效、便捷、智能的全方位解決方案,全面開啟智慧家居溫控新時(shí)代。 三合設(shè)備接入,一屏輕松駕馭傳統(tǒng)暖通 Aqara 智能溫控器 W400 打破傳統(tǒng)限制,支持同時(shí)接入中央空調(diào)(氟機(jī) / 水機(jī))、新風(fēng)、地暖設(shè)備,無(wú)需復(fù)雜改造即可
    的頭像 發(fā)表于 04-16 17:26 ?658次閱讀

    Altium Designer頁(yè)原理圖繪制基礎(chǔ)

    電子發(fā)燒友網(wǎng)站提供《Altium Designer頁(yè)原理圖繪制基礎(chǔ).pdf》資料免費(fèi)下載
    發(fā)表于 01-22 17:11 ?8次下載
    Altium Designer<b class='flag-5'>多</b><b class='flag-5'>頁(yè)</b>原理圖繪制基礎(chǔ)

    DisplayPort顯示的配置方法

    現(xiàn)代辦公和娛樂(lè)環(huán)境顯示已經(jīng)成為提升效率和體驗(yàn)的重要工具。DisplayPort作為種先進(jìn)的顯示接口技術(shù),不僅支持高分辨率和高刷新
    的頭像 發(fā)表于 12-27 18:08 ?2959次閱讀

    ShiMeta鴻蒙同步拼接解決方案

    ???方案概述鴻蒙同步解決方案ShiMeta鴻蒙數(shù)字標(biāo)牌系統(tǒng)的基礎(chǔ)上,通過(guò)信號(hào)處理器,實(shí)現(xiàn)
    的頭像 發(fā)表于 12-13 16:45 ?952次閱讀
    ShiMeta<b class='flag-5'>鴻蒙</b><b class='flag-5'>多</b><b class='flag-5'>屏</b>同步拼接解決方案

    鴻蒙原生開發(fā)手記:01-元服務(wù)開發(fā)

    同樣的使用方法。 服務(wù)卡片 元服務(wù)可以添加服務(wù)卡片,詳細(xì)介紹見《鴻蒙原生開發(fā)手記:02-服務(wù)卡片開發(fā)》 開發(fā)測(cè)試 DevEco 點(diǎn)擊運(yùn)行,設(shè)備上可以從負(fù)一屏上方的“搜索”按鈕,點(diǎn)擊進(jìn)入我的元服務(wù)
    發(fā)表于 11-14 17:28

    設(shè)計(jì)院eplan 500頁(yè)項(xiàng)目圖紙

    設(shè)計(jì)院eplan 500頁(yè)項(xiàng)目圖紙
    發(fā)表于 10-28 10:49 ?398次下載