91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

在鴻蒙系統(tǒng)的擼引導(dǎo)頁代碼的經(jīng)驗(yàn)

OpenHarmony技術(shù)社區(qū) ? 來源:中軟國際 ? 作者:焦俊盈 ? 2021-09-06 09:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

手機(jī) APP 的引導(dǎo)頁是一個(gè)常見的功能,今天和大家一起分享在鴻蒙系統(tǒng)的擼引導(dǎo)頁代碼的經(jīng)驗(yàn)。

應(yīng)用引導(dǎo)頁的功能

①為什么要做應(yīng)用的引導(dǎo)功能?

幾乎所有的 App 都會(huì)有做一些界面引導(dǎo),有的是頁面交互的引導(dǎo),有的是為了介紹新功能。

②通用的功能性引導(dǎo)大概分哪些呢?

主功能引導(dǎo)、新功能引導(dǎo)和功能轉(zhuǎn)移或改名引導(dǎo)。

③通用的應(yīng)用引導(dǎo),需要注意哪些?

引導(dǎo)的內(nèi)容文字不宜太長,適當(dāng)加入一些圖案可以方便用戶理解。言歸正傳吧,開始咱們今天的主題,如何實(shí)現(xiàn)應(yīng)用的引導(dǎo)功能吧!

實(shí)現(xiàn)應(yīng)用的引導(dǎo)功能

具體步驟如下:

首先來看看討論的引導(dǎo)功能的效果吧!點(diǎn)擊引導(dǎo)頁,向上滑動(dòng)過程,第一個(gè)界面圖案和文字漸變消失的過程。

而第二頁界面的圖片和文字漸漸清晰可見。底部 Next 圖標(biāo)會(huì)下滑隱藏再彈出的動(dòng)畫效果。

開發(fā)準(zhǔn)備

搭建鴻蒙開發(fā)環(huán)境,這里就不做介紹了,如果沒有環(huán)境沒有搭建好的同學(xué)可以進(jìn)入學(xué)習(xí)安裝環(huán)境, 安裝好環(huán)境以后接下來我們就可以進(jìn)行開發(fā)工作了。

①設(shè)計(jì)思路

首先我們做的是公用的組件,我們需要使用組件化思想去搭建我們的項(xiàng)目框架,接下來根據(jù)組件的需求我們先去設(shè)計(jì)一下界面。

設(shè)計(jì)好之后我們需要對(duì)頁面添加數(shù)據(jù),添加完數(shù)據(jù)之后組件的大體界面已經(jīng)展示給我們,下來就是在滑動(dòng) page 的時(shí)候添加底部 button 的回彈動(dòng)畫,并且在此時(shí)我們需要操作 page 的子 view。最后我們要去使用我們的組件。

②設(shè)計(jì)步驟

(1)設(shè)計(jì)界面

根據(jù)我們要實(shí)現(xiàn)的功能,我們可以使用 PageSlider 控件去實(shí)現(xiàn)界面布局文件,實(shí)現(xiàn)代碼為:

《PageSlider

ohos:id=“$+id:vertical_view_pager”

ohos:width=“match_parent”

ohos:height=“match_parent” 》《/PageSlider》

添加數(shù)據(jù)、初始化數(shù)據(jù):

public void setData() {

super.setData();

pageColors = new ArrayList《》();

pageColors.add(getString(ResourceTable.Color_colorAccent));

pageColors.add(getString(ResourceTable.Color_color2));

pageColors.add(getString(ResourceTable.Color_colorPrimary));

pageColors.add(getString(ResourceTable.Color_color3));

pageMoudles = getData();

}

private List《PageMoudle》 getData() {

String textValue = “Lorem Ipsum is simply dummy text of the printing and typesetting industry.”;

PageMoudle pageMoudleOne = new PageMoudle();

pageMoudleOne.setRecoureId(ResourceTable.Graphic_intro_second_vector);

pageMoudleOne.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(0))));

pageMoudleOne.setTitle(“Lorem Ipsum Lorem Ipsum”);

pageMoudleOne.setText(textValue + textValue + textValue);

pageMoudleOne.setTitleSize(17);

pageMoudleOne.setTextSize(14);

List《PageMoudle》 datas = new ArrayList《》();

datas.add(pageMoudleOne);

PageMoudle pageMoudleTwo = new PageMoudle();

pageMoudleTwo.setRecoureId(ResourceTable.Graphic_four);

pageMoudleTwo.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(1))));

pageMoudleTwo.setTitle(“Lorem Ipsum Lorem Ipsum ”);

pageMoudleTwo.setText(textValue + textValue);

datas.add(pageMoudleTwo);

PageMoudle pageMoudleThree = new PageMoudle();

pageMoudleThree.setRecoureId(ResourceTable.Graphic_ohos);

pageMoudleThree.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(2))));

pageMoudleThree.setTitle(“Lorem Ipsum”);

pageMoudleThree.setText(textValue);

datas.add(pageMoudleThree);

PageMoudle pageMoudleFour = new PageMoudle();

pageMoudleFour.setRecoureId(ResourceTable.Media_new_intro);

pageMoudleFour.setBackGroudRgbColor(RgbColor.fromArgbInt(Color.getIntColor(pageColors.get(3))));

pageMoudleFour.setTitle(“Lorem Ipsum”);

pageMoudleFour.setText(textValue + textValue + textValue);

datas.add(pageMoudleFour);

return datas;

}

設(shè)置 provider:

pageSlider = (PageSlider) findComponentById(ResourceTable.Id_vertical_view_pager);

pageSlider.setOrientation(Component.VERTICAL);

pageSlider.addPageChangedListener(this);

pageSlider.setTouchEventListener(this::onTouchEvent);

adapter = new VerticalIntroPagerAdapter(this, pageMoudles);

pageSlider.setProvider(adapter);

(2)添加動(dòng)畫

這里我們使用屬性動(dòng)畫去完成底部 button 的上彈和下彈操作,上彈和下彈是和我們手指滑動(dòng)的方向是有關(guān)系的。

所以這里我們必須實(shí)現(xiàn)手指的觸摸事件,在觸摸事件中獲取我們手機(jī)滑動(dòng)的距離,如果距離大于 0 則是下滑,如果小于 0 則是下滑。

獲取是上滑還是下滑代碼如下:

@Override

public boolean onTouchEvent(Component component, TouchEvent touchEvent) {

int action = touchEvent.getAction();

switch (action) {

case TouchEvent.PRIMARY_POINT_DOWN:

pageSlider.setSlidingPossible(true);

startPointY = getTouchY(touchEvent, 0, component);

return true;

case TouchEvent.POINT_MOVE:

movePointY = getTouchY(touchEvent, touchEvent.getIndex(), component) - startPointY;

if (page != 0 && movePointY 》 0) {

WindowManager.getInstance().getTopWindow().get().setStatusBarColor(getColorByString(pageColors.get(page - 1)));

}

return true;

case TouchEvent.PRIMARY_POINT_UP:

return true;

default:

}

return false;

}

獲取到上滑還是下滑后,接下來就去給底部 button 設(shè)置動(dòng)畫。動(dòng)畫用的是屬性動(dòng)畫,屬性動(dòng)畫大體實(shí)現(xiàn)是初始化動(dòng)畫,設(shè)置動(dòng)畫持續(xù)時(shí)間,實(shí)現(xiàn)動(dòng)畫屬性值變化監(jiān)聽事件,最后啟動(dòng)動(dòng)畫。

大體代碼如下:

private void startChangeButtonBg(int direction, int duration) {

if (animatorValue == null) {

animatorValue = new AnimatorValue();

}

animatorValue.setCurveType(Animator.CurveType.LINEAR);

animatorValue.setDuration(duration);

animatorValue.setValueUpdateListener(new AnimatorValue.ValueUpdateListener() {

@Override

public void onUpdate(AnimatorValue animatorValue, float v) {

if (direction 《= 0) {

double value = ((1 - (double)v) * nextHeight) * direction;

next.setMarginBottom((int) value);

} else {

float value = -(v * nextHeight);

next.setMarginBottom((int) value);

if (v 》 0.9) {

if (page == 3) {

skip.setVisibility(Component.INVISIBLE);

next.setText(“DONE”);

next.setNormalColor(pageColors.get(1));

} else {

skip.setVisibility(Component.VISIBLE);

next.setText(“NEXT”);

next.setNormalColor(pageColors.get(page + 1));

}

next.setMarginBottom(0);

}

}

}

});

setAnimStateChangeList(direction);

animatorValue.start();

}

private void setAnimStateChangeList(int direction) {

animatorValue.setStateChangedListener(new Animator.StateChangedListener() {

@Override

public void onStart(Animator animator) {

if (direction 《= 0) {

if (page == 3) {

skip.setVisibility(Component.INVISIBLE);

next.setText(“DONE”);

next.setNormalColor(pageColors.get(1));

} else {

skip.setVisibility(Component.VISIBLE);

next.setText(“NEXT”);

next.setNormalColor(pageColors.get(page + 1));

}

}

}

@Override

public void onStop(Animator animator) {

}

@Override

public void onCancel(Animator animator) {

}

@Override

public void onEnd(Animator animator) {

movePointY = 0;

}

@Override

public void onPause(Animator animator) {

}

@Override

public void onResume(Animator animator) {

}

});

}

(3)操作子 view

如何去操作子 view 呢?首先我們先去看看 PageSlider 是否有子 view 的操作監(jiān)聽接口,查看 api 后沒有這樣的接口獲取方法,那就得我們自己去考慮怎么實(shí)現(xiàn)呢。

我這里的實(shí)現(xiàn)思路是在 PageSlider 設(shè)置 provider 的時(shí)候保存所有的子 view 對(duì)象,然后再使用的時(shí)候拿出子 view 再進(jìn)行操作。

我們這里例子是改變子 view 的透明度。代碼實(shí)現(xiàn)如下:

保存子 view:

public class VerticalIntroPagerAdapter extends PageSliderProvider {

LinkedHashMap《Integer, Component》 pageComonents;

public VerticalIntroPagerAdapter(Context context, List《PageMoudle》 datas) {

this.context = context;

this.datas = datas;

pageComonent = new ArrayList《》();

// 初始化用來添加子view的集合,注意這里是一個(gè)有序集合

pageComonents = new LinkedHashMap《Integer, Component》();

}

//添加子view

@Override

public Object createPageInContainer(ComponentContainer componentContainer, int i) {

if (!pageComonents.containsValue(component)) {

pageComonents.put(i, component);

}

}

}

操作子 view:

private void setPageApale(int currentPage, int targetPage, float offset) {

if (adapter.pageComonents != null && adapter.pageComonents.get(currentPage) != null

&& adapter.pageComonents.get(targetPage) != null) {

float alpha = new BigDecimal(1.0f).subtract(new BigDecimal(offset).multiply(new BigDecimal(2))).floatValue();

if (offset 》= 0.4 && offset 《= 0.9) {

offset = new BigDecimal(offset).subtract(new BigDecimal( 0.4f)).floatValue();

} else if (offset 《 0.4) {

offset = 0.0f;

} else {

offset = 1.0f;

}

setApale(currentPage, targetPage, alpha, offset);

}

}

到這里我們的豎直引導(dǎo)工具組件就已經(jīng)封裝好了。

(4)使用組件

如何去使用我們的組件呢?這里我們用的是組件化思想。所以我們呢只需要在我們的項(xiàng)目中引入我們的組件,然后在我們的 ablity 中集成我們封裝好的 VerticalIntroSlice 對(duì)象就行。

最后我們?cè)侔逊庋b一個(gè)添加數(shù)據(jù)的接口,把我們的數(shù)據(jù)變成動(dòng)態(tài)添加的就行。

結(jié)語

到此我們的整個(gè)設(shè)計(jì)流程就完了,通過上面的操作,相信小伙伴們就可以實(shí)現(xiàn)應(yīng)用引導(dǎo)功能了。

責(zé)任編輯:haq

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

    關(guān)注

    33

    文章

    1592

    瀏覽量

    76028
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    69914
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2155

    瀏覽量

    36112

原文標(biāo)題:在鴻蒙手機(jī)上擼一個(gè)APP引導(dǎo)頁!

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    深開鴻開源鴻蒙社區(qū)主干代碼貢獻(xiàn)量破650萬行

    ,1500多款產(chǎn)品通過兼容性測(cè)評(píng),構(gòu)建起覆蓋千行百業(yè)的龐大生態(tài)體系。近日,作為開源鴻蒙社區(qū)的核心貢獻(xiàn)者之一,深圳開鴻數(shù)字產(chǎn)業(yè)發(fā)展有限公司(簡稱“深開鴻”)社區(qū)主干代碼貢獻(xiàn)量超650萬行,以顯著的
    的頭像 發(fā)表于 01-07 10:22 ?538次閱讀

    鴻蒙系統(tǒng)對(duì)手機(jī)市場(chǎng)會(huì)產(chǎn)生怎樣的影響?現(xiàn)在汽車是不是也用上鴻蒙系統(tǒng)了?

    鴻蒙系統(tǒng)對(duì)手機(jī)市場(chǎng)會(huì)產(chǎn)生怎樣的影響?現(xiàn)在汽車是不是也用上鴻蒙系統(tǒng)了?
    發(fā)表于 12-04 20:47

    鴻蒙星光盛典見證生態(tài)碩果!深開鴻斬獲開源鴻蒙雙項(xiàng)榮譽(yù)

    近日,鴻蒙星光盛典生態(tài)論壇深圳隆重舉辦。作為開源鴻蒙生態(tài)的核心共建者,深開鴻受邀出席這一盛會(huì),與眾多生態(tài)伙伴共話技術(shù)創(chuàng)新,共繪生態(tài)未來。開源鴻蒙
    的頭像 發(fā)表于 12-02 15:17 ?647次閱讀
    <b class='flag-5'>鴻蒙</b>星光盛典見證生態(tài)碩果!深開鴻斬獲開源<b class='flag-5'>鴻蒙</b>雙項(xiàng)榮譽(yù)

    關(guān)于系統(tǒng)啟動(dòng)引導(dǎo)程序(startup_hbirdv2.S)

    一、隊(duì)伍介紹 本篇為蜂鳥E203系列分享第三篇,本篇介紹的內(nèi)容是系統(tǒng)啟動(dòng)引導(dǎo)程序(startup_hbirdv2.S。 二、什么是系統(tǒng)啟動(dòng)引導(dǎo)程序?
    發(fā)表于 10-30 07:47

    知乎開源“智能預(yù)渲染框架” 幾行代碼實(shí)現(xiàn)鴻蒙應(yīng)用頁面“秒開”

    近日,知乎Gitee平臺(tái)開源了其自研的鴻蒙“智能預(yù)渲染框架”,并將該框架的Har包上架到OpenHarmony三方庫中心倉。該框架在鴻蒙平臺(tái)首創(chuàng)“智能預(yù)渲染”技術(shù),旨在破解應(yīng)用復(fù)雜頁面加載緩慢
    的頭像 發(fā)表于 08-29 14:32 ?644次閱讀
    知乎開源“智能預(yù)渲染框架” 幾行<b class='flag-5'>代碼</b>實(shí)現(xiàn)<b class='flag-5'>鴻蒙</b>應(yīng)用頁面“秒開”

    開源系統(tǒng)適配:聚徽分享國產(chǎn)工控平板 Linux / 鴻蒙系統(tǒng)下的技術(shù)優(yōu)化

    工業(yè)自動(dòng)化與智能化加速推進(jìn)的當(dāng)下,國產(chǎn)工控平板的系統(tǒng)適配成為提升設(shè)備性能與競(jìng)爭力的關(guān)鍵環(huán)節(jié)。Linux 和鴻蒙作為開源系統(tǒng),憑借其高度的開放性與可定制性,為國產(chǎn)工控平板帶來新的發(fā)展機(jī)
    的頭像 發(fā)表于 06-13 16:29 ?1126次閱讀

    鴻蒙5開發(fā)寶藏案例分享---優(yōu)化應(yīng)用包體積大小問題

    ;] 無用代碼剔除 :開啟ProGuard(僅保留運(yùn)行時(shí)用到的類)。 ?** 結(jié)語** 包體積優(yōu)化不是“高級(jí)技巧”,而是直接影響用戶留存的關(guān)鍵操作!以上這些方法都是鴻蒙官方團(tuán)隊(duì)驗(yàn)證過的實(shí)戰(zhàn)經(jīng)驗(yàn),趕緊試試吧
    發(fā)表于 06-13 10:09

    鴻蒙5開發(fā)寶藏案例分享---Swiper組件性能優(yōu)化實(shí)戰(zhàn)

    案例確實(shí)讓人眼前一亮!實(shí)際接入后,我們的圖庫幀率從 45fps→58fps **,效果拔群。大家遇到復(fù)雜列表/輪播場(chǎng)景時(shí),一定要試試這些方案。如果有其他坑或經(jīng)驗(yàn),歡迎評(píng)論區(qū)交流呀 **? **覺得有用記得點(diǎn)贊收藏! **?
    發(fā)表于 06-12 17:53

    鴻蒙5開發(fā)寶藏案例分享---應(yīng)用并發(fā)設(shè)計(jì)

    到性能調(diào)優(yōu),這些案例都是華為工程師的血淚經(jīng)驗(yàn)結(jié)晶。下面用最直白的語言+代碼示例,帶你玩轉(zhuǎn)HarmonyOS并發(fā)開發(fā)! ?一、ArkTS并發(fā)模型:顛覆傳統(tǒng)的設(shè)計(jì) 傳統(tǒng)模型痛點(diǎn) graph LR A[共享
    發(fā)表于 06-12 16:19

    VirtualLab:激光引導(dǎo)無焦系統(tǒng)的分析與設(shè)計(jì)

    摘要 對(duì)于天文望遠(yuǎn)鏡,激光引導(dǎo)星通常用于校正大氣畸變。這種人造恒星圖像通常由高功率激光束幾十公里之外拍攝。為了精確地設(shè)計(jì)光學(xué)系統(tǒng)以產(chǎn)生和控制激光引導(dǎo)星的尺寸,必須考慮激光束的衍射效
    發(fā)表于 05-22 08:49

    國產(chǎn)操作系統(tǒng)加速崛起——鴻蒙電腦補(bǔ)齊鴻蒙生態(tài)最重要拼圖

    國產(chǎn)操作系統(tǒng)加速崛起——鴻蒙電腦補(bǔ)齊鴻蒙生態(tài)最重要拼圖 5月19日,首次應(yīng)用鴻蒙操作系統(tǒng)的個(gè)人電腦(PC)
    的頭像 發(fā)表于 05-21 11:41 ?702次閱讀

    鴻蒙電腦拿什么和Windows競(jìng)爭

    5月8日,鴻蒙電腦技術(shù)與生態(tài)溝通會(huì)上,鴻蒙操作系統(tǒng)(HarmonyOS 5)首次電腦端亮相;這是華為首款
    的頭像 發(fā)表于 05-09 11:41 ?1445次閱讀

    鴻蒙操作系統(tǒng)首登電腦端,華為開啟鴻蒙辦公新時(shí)代

    2025年5月8日,華為深圳舉辦了鴻蒙電腦技術(shù)與生態(tài)溝通會(huì),鴻蒙操作系統(tǒng)首次電腦端亮相。這既是中國電子信息產(chǎn)業(yè)的歷史性時(shí)刻,也是華為
    發(fā)表于 05-08 14:20 ?6086次閱讀
    <b class='flag-5'>鴻蒙</b>操作<b class='flag-5'>系統(tǒng)</b>首登電腦端,華為開啟<b class='flag-5'>鴻蒙</b>辦公新時(shí)代

    DevEco Studio AI輔助開發(fā)工具兩大升級(jí)功能 鴻蒙應(yīng)用開發(fā)效率再提升

    HarmonyOS應(yīng)用的AI智能輔助開發(fā)助手——CodeGenie,該AI助手深度集成DevEco Studio中,提供鴻蒙知識(shí)智能問答、鴻蒙ArkTS代碼補(bǔ)全/生成和萬能卡片生成等
    發(fā)表于 04-18 14:43

    深度融入“純血鴻蒙”|芯??萍计煜驴佃諳KOK首批入駐鴻蒙NEXT系統(tǒng)

    3月20日,隨著首款全面搭載純血鴻蒙系統(tǒng)的"寬折疊"手機(jī)PuraX的發(fā)布,全面鴻蒙時(shí)代正悄然到來。鴻蒙NEXT(純血鴻蒙)自正式亮相以來,這
    的頭像 發(fā)表于 03-21 18:04 ?1622次閱讀
    深度融入“純血<b class='flag-5'>鴻蒙</b>”|芯海科技旗下康柚OKOK首批入駐<b class='flag-5'>鴻蒙</b>NEXT<b class='flag-5'>系統(tǒng)</b>