色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在鴻蒙系統(tǒng)的擼引導頁代碼的經驗

OpenHarmony技術社區(qū) ? 來源:中軟國際 ? 作者:焦俊盈 ? 2021-09-06 09:25 ? 次閱讀

手機 APP 的引導頁是一個常見的功能,今天和大家一起分享在鴻蒙系統(tǒng)的擼引導頁代碼的經驗。

應用引導頁的功能

①為什么要做應用的引導功能?

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

②通用的功能性引導大概分哪些呢?

主功能引導、新功能引導和功能轉移或改名引導。

③通用的應用引導,需要注意哪些?

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

實現(xiàn)應用的引導功能

具體步驟如下:

首先來看看討論的引導功能的效果吧!點擊引導頁,向上滑動過程,第一個界面圖案和文字漸變消失的過程。

而第二頁界面的圖片和文字漸漸清晰可見。底部 Next 圖標會下滑隱藏再彈出的動畫效果。

開發(fā)準備

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

①設計思路

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

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

②設計步驟

(1)設計界面

根據(jù)我們要實現(xiàn)的功能,我們可以使用 PageSlider 控件去實現(xiàn)界面布局文件,實現(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;

}

設置 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)添加動畫

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

所以這里我們必須實現(xiàn)手指的觸摸事件,在觸摸事件中獲取我們手機滑動的距離,如果距離大于 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 設置動畫。動畫用的是屬性動畫,屬性動畫大體實現(xiàn)是初始化動畫,設置動畫持續(xù)時間,實現(xiàn)動畫屬性值變化監(jiān)聽事件,最后啟動動畫。

大體代碼如下:

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 后沒有這樣的接口獲取方法,那就得我們自己去考慮怎么實現(xiàn)呢。

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

我們這里例子是改變子 view 的透明度。代碼實現(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的集合,注意這里是一個有序集合

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);

}

}

到這里我們的豎直引導工具組件就已經封裝好了。

(4)使用組件

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

最后我們再把封裝一個添加數(shù)據(jù)的接口,把我們的數(shù)據(jù)變成動態(tài)添加的就行。

結語

到此我們的整個設計流程就完了,通過上面的操作,相信小伙伴們就可以實現(xiàn)應用引導功能了。

責任編輯:haq

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

    關注

    33

    文章

    1583

    瀏覽量

    73140
  • 鴻蒙系統(tǒng)

    關注

    183

    文章

    2638

    瀏覽量

    67067
  • HarmonyOS
    +關注

    關注

    79

    文章

    1987

    瀏覽量

    31106

原文標題:在鴻蒙手機上擼一個APP引導頁!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    DevEco Studio構建分析工具Build Analyzer 為原生鴻蒙應用開發(fā)提速

    原生鴻蒙應用開發(fā)過程中,隨著項目復雜度的增加,開發(fā)者花費構建上的時間越來越長,導致開發(fā)效率降低。為了幫助開發(fā)者解決構建效率的問題,華為DevEco Studio上提供了Build
    發(fā)表于 02-17 18:06

    【「鴻蒙操作系統(tǒng)設計原理與架構」閱讀體驗】01-初始華為鴻蒙

    的應用經驗,已形成了一套較完備的理論體系。鴻蒙操作系統(tǒng)該理論體系的基礎上,結合我國多年的產業(yè)化經驗,參考學術界的最新研究成果,完成了基礎架
    發(fā)表于 01-25 11:05

    AIGC入門及鴻蒙入門

    、小巧、功能強大等特點,能夠物聯(lián)網時代為用戶提供更加便捷、高效的服務。 2. 開發(fā)環(huán)境搭建: 下載并安裝DevEco Studio,這是華為官方為鴻蒙系統(tǒng)開發(fā)提供的集成開發(fā)環(huán)境。 配置開發(fā)環(huán)境,包括安裝
    發(fā)表于 01-13 10:32

    鴻蒙Flutter實戰(zhàn):14-現(xiàn)有Flutter 項目支持鴻蒙 II

    引言 之前的文章鴻蒙Flutter實戰(zhàn):09-現(xiàn)有Flutter項目支持鴻蒙中,介紹了如何改造項目,適配鴻蒙平臺。 文中講述了整體的理念和思路,本文更進一步,結合可實操的項目
    發(fā)表于 12-26 14:59

    鴻蒙系統(tǒng)專用版微信內測即將啟動

    近日,有知情人士稱鴻蒙系統(tǒng)專用版微信的開發(fā)工作現(xiàn)已基本完成。這一消息標志著微信適配鴻蒙系統(tǒng)方面取得了重要進展,為
    的頭像 發(fā)表于 11-07 10:58 ?888次閱讀

    Taro 鴻蒙技術內幕系列(二):如何讓 W3C 標準的 CSS跑鴻蒙

    使用 HarmonyOS 提供的樣式系統(tǒng),開發(fā)者使用 Taro 開發(fā)時會遇到非常多的樣式兼容性問題,寫出來的代碼也會失去跨平臺兼容的
    的頭像 發(fā)表于 10-31 10:54 ?279次閱讀
    Taro <b class='flag-5'>鴻蒙</b>技術內幕系列(二):如何讓 W3C 標準的 CSS跑<b class='flag-5'>在</b><b class='flag-5'>鴻蒙</b>上

    原生鴻蒙操作系統(tǒng)正式發(fā)布,誠邁科技與華為一起共建鴻蒙新世界

    特性等提升顯著,標志著我國操作系統(tǒng)研發(fā)領域取得了重大突破。 誠邁科技與華為一直保持著緊密的伙伴關系,公司不僅是最早加入鴻蒙生態(tài)的共建者之一,也是鴻蒙生態(tài)的核心共建伙伴。 2021年
    的頭像 發(fā)表于 10-28 09:29 ?722次閱讀
    原生<b class='flag-5'>鴻蒙</b>操作<b class='flag-5'>系統(tǒng)</b>正式發(fā)布,誠邁科技與華為一起共建<b class='flag-5'>鴻蒙</b>新世界

    Taro鴻蒙技術內幕系列(一):如何將React代碼ArkUI上

    基于 Taro 打造的京東鴻蒙 APP 已跟隨鴻蒙 Next 系統(tǒng)公測,本系列文章將深入解析 Taro 如何實現(xiàn)使用 React 開發(fā)高性能鴻蒙應用的技術內幕。
    的頭像 發(fā)表于 10-25 17:24 ?467次閱讀
    Taro<b class='flag-5'>鴻蒙</b>技術內幕系列(一):如何將React<b class='flag-5'>代碼</b>跑<b class='flag-5'>在</b>ArkUI上

    鴻蒙系統(tǒng)生態(tài)設備突破10億臺 超過15000個鴻蒙原生應用和元服務上架

    從操作系統(tǒng)內核、文件系統(tǒng),到編程語言、人工智能框架和大模型等全部實現(xiàn)自研;放棄了傳統(tǒng)的Linux內核以及安卓開源代碼項目AOSP,僅支持鴻蒙內核和
    的頭像 發(fā)表于 10-23 16:43 ?1227次閱讀

    鴻蒙Flutter實戰(zhàn):08-如何調試代碼

    。 方案二 適應DecEco運行鴻蒙項目,注意需要打開的是ohos鴻蒙目錄代碼,待IDE分析結束后,點擊運行。 當app鴻蒙設備上啟動成功
    發(fā)表于 10-23 16:29

    鴻蒙開發(fā)就業(yè)前景到底怎么樣?

    。 掌握鴻蒙開發(fā)技能的人將有更多的就業(yè)機會選擇。 薪資水平吸引力: 由于鴻蒙開發(fā)需要較高的技術水平和豐富的經驗,因此薪資水平也相對較高。市場調查數(shù)據(jù)顯示,具備一定經驗
    發(fā)表于 05-09 17:37

    36歲了還有必要轉行鴻蒙開發(fā)嗎?

    鴻蒙開發(fā)這事兒,真的挺有必要的! 鴻蒙操作系統(tǒng),它厲害就厲害高性能、可擴展,還特智能。現(xiàn)在智能設備和物聯(lián)網火得不行,鴻蒙就是要成為這個時代
    發(fā)表于 05-09 17:01

    最新開源代碼證實!“鴻蒙原生版”微信正在積極開發(fā)中

    開放源代碼項目等代碼, **僅支持鴻蒙內核和鴻蒙系統(tǒng)的應用 ** —— 不再兼容 Android 應用。 既然不再兼容 Android 端
    發(fā)表于 05-08 17:08

    【開源鴻蒙】下載OpenHarmony 4.1 Release源代碼

    本文介紹了如何下載開源鴻蒙(OpenHarmony)操作系統(tǒng) 4.1 Release版本的源代碼,該方法同樣可以用于下載OpenHarmony最新開發(fā)版本(master分支)或者4.0 Release、3.2 Release等發(fā)
    的頭像 發(fā)表于 04-27 23:16 ?1234次閱讀
    【開源<b class='flag-5'>鴻蒙</b>】下載OpenHarmony 4.1 Release源<b class='flag-5'>代碼</b>

    鴻蒙系統(tǒng)三防平板怎么樣

    鴻蒙系統(tǒng)三防平板采用了高強度金屬材質和防水防塵設計,使其具備出色的抗壓能力和耐候性能。惡劣環(huán)境下,這款平板電腦能夠抵御風雨、沙塵等自然因素的侵襲,保證設備的正常運行。同時,其堅固耐用的外殼也能有
    發(fā)表于 04-12 14:26
    主站蜘蛛池模板: 亚洲国产精品日本无码网站 | 色视频色露露永久免费观看 | 热久久综合这里只有精品电影 | www精品一区二区三区四区 | 国产午夜理论片YY8840Y | 国产激情视频在线播放 | 把腿张开再深点好爽宝贝 | 国产成人高清在线观看播放 | 午夜阳光影院在线观看视频 | 一区二区三区高清视频 | 久久精品热播在线看 | 国产真实女人一级毛片 | 亚洲免费视频在线 | 丝袜美女自摸 | 草莓视频在线播放视频 | 福利片福利一区二区三区 | 日本一本免费线观看视频 | 98久久人妻无码精品系列蜜桃 | 99re这里只有精品国产 | 超h高h肉h文教室生理课 | 精品免费视在线视频观看 | 成人免费视频在线 | 老师紧窄粉嫩 | 日韩人妻无码精品-专区 | 久久 这里只精品 免费 | 男人j进女人j一进一出 | 日本久久精品毛片一区随边看 | writeas雷狮直播| 久久毛片视频 | 国产福利一区二区精品 | 国产偷国产偷亚洲高清人乐享 | 国产亚洲AV无码成人网站 | 亚洲国产成人一区二区在线 | 超碰在线vip| 久久久无码精品无码国产人妻丝瓜 | 欧美阿v在线免播播放 | 快播最新电影网站 | 4虎影院午夜在线观看 | 黄 色 网 站 免 费 涩涩屋 | 亚洲黄色官网 | 少妇精品久久久一区二区三区 |