前言
看過鴻蒙2.0系統的發布會,大家是不是蠢蠢欲動,想要開發第一個鴻蒙的程式呢,網上有很多文章介紹鴻蒙系統、跟Android的區別以及怎么寫HelloWorld的文章,這邊就不復制粘貼了,
今天換個花樣,來看下如何實作Android里面一些常見功能與效果,因為鴻蒙剛出來不久,一切都還不是很成熟(沒有前輩的神器),只能靠自己手x代碼,廢話不多說,來看下鴻蒙系統里如何實作基本的圖片圓角功能吧,
如今大部分美術在設計樣式的時候,都會給圖片帶上圓角,在鴻蒙開發程序中,一定會遇到要對圖片進行二次處理,添加上圓角、或者圓形影像,
Android產品:這個圖加下圓角吧,應該花不了你3分鐘吧?
開發小蒙:喵的,這是鴻蒙,沒有glide,怎么玩,給我3天先 ,
Android產品:gun,忽悠老子呢,你以為我第一天當產品么?圓角這么簡單的事,還需要3天,你是不是花2天半打醬油去了么,
開發小蒙:卒,,,,,,
小蒙好歹也是多年Android開發的老手,怎么會輕易認輸,經過一番翻箱倒柜,查找鴻蒙api檔案,終于實作了如下效果:

界面背景為灰色,圖片布局背景為紅色,圖片布局中放了一張正方形的圖片,被裁減成了圓角矩形,那么這個效果是怎么實作的呢?
我們以往在Android的開發程序中,要做到這個效果,常規的解決方案有以下三種
1、使用Glide
2、自定義ImageView
3、直接操作圖片繪制
在鴻蒙系統中,暫時沒有Glide(可能很久之后才會有),直接操作圖片的Api相對也還不夠完善,所以我們選擇的是自定義組件,具體做法如下:
首先你要能夠跟據官方的檔案,完整運行出Hello World程式(廢話),不行的請自行解決
1、新建一個布局檔案main_abilityslice_layout.xml,一個真實布局居中嵌套一個方向布局
<?xml version="1.0" encoding="utf-8"?>
<DependentLayout xmlns:ohos="http://schemas.huawei.com/res/harmonyos"
ohos:width="match_parent"
ohos:height="match_parent"
ohos:background_element="#ffffff"
ohos:gravity="center">
<DirectionalLayout
ohos:id="$+id:image_directional_layout"
ohos:width="100dp"
ohos:height="100dp"
ohos:background_element="#ff0000"
ohos:orientation="vertical" />
</DependentLayout>
2、新建一個自定義組件RoundRectView繼承自Image組件
public class RoundRectView extends Image {
private static final int radius = 20;//圓角半徑,如果設定成圖片的寬度的一半,則會圖片變成圓形
private PixelMapHolder pixelMapHolder;//像素圖片持有者
private RectFloat rectDst;//目標區域
private RectFloat rectSrc;//源區域
public RoundRectView(Context context, Size viewSize) {//Size是該視圖顯示區域的大小
super(context);
onDraw();
rectDst = new RectFloat(0,0,viewSize.width,viewSize.height);
}
public void putPixelMap(PixelMap pixelMap){
if (pixelMap != null) {
rectSrc = new RectFloat(0, 0, pixelMap.getImageInfo().size.width, pixelMap.getImageInfo().size.height);
pixelMapHolder = new PixelMapHolder(pixelMap);
invalidate();//重新檢驗該組件
}else{
pixelMapHolder = null;
setPixelMap(null);
}
}
private void onDraw(){
//添加繪制任務
this.addDrawTask((view, canvas) -> {
if (pixelMapHolder == null){
return;
}
synchronized (pixelMapHolder) {
//繪制圓角矩形圖片
canvas.drawPixelMapHolderRoundRectShape(pixelMapHolder, rectSrc, rectDst, radius, radius);
pixelMapHolder = null;
}
});
}
}
3、將圖片、組件與視圖進行系結
public class MainAbilitySlice extends AbilitySlice {
DirectionalLayout imageDirectionalLayout;
@Override
protected void onStart(Intent intent) {
super.onStart(intent);
initView();
}
private void initView(){
setUIContent(ResourceTable.Layout_main_abilityslice_layout);
imageDirectionalLayout = (DirectionalLayout)findComponentById(ResourceTable.Id_image_directional_layout);
RoundRectView rectView = new RoundRectView(this,new Size(SizeUtils.dp2px(100),SizeUtils.dp2px(100)));
rectView.putPixelMap(getPixelMap(ResourceTable.Media_test));//設定圖片,ID需要先編譯后才能識別到,當前圖片資源放置在resources/base/media/test.png
DirectionalLayout.LayoutConfig layoutConfig = new DirectionalLayout.LayoutConfig(DirectionalLayout.LayoutConfig.MATCH_PARENT,DirectionalLayout.LayoutConfig.MATCH_PARENT);
imageDirectionalLayout.addComponent(rectView,layoutConfig);
}
/**
* 通過資源ID獲取位圖物件
**/
private PixelMap getPixelMap(int drawableId) {
InputStream drawableInputStream = null;
try {
drawableInputStream = BaseApplication.getInstance().getResourceManager().getResource(drawableId);
ImageSource.SourceOptions sourceOptions = new ImageSource.SourceOptions();
sourceOptions.formatHint = "image/png";
ImageSource imageSource = ImageSource.create(drawableInputStream, sourceOptions);
ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();
decodingOptions.desiredSize = new Size(0, 0);
decodingOptions.desiredRegion = new Rect(0, 0, 0, 0);
decodingOptions.desiredPixelFormat = PixelFormat.ARGB_8888;
PixelMap pixelMap = imageSource.createPixelmap(decodingOptions);
return pixelMap;
} catch (Exception e) {
e.printStackTrace();
} finally {
try{
if (drawableInputStream != null){
drawableInputStream.close
}
}catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
經過以上幾步操作之后,就可以做出一個鴻蒙版的圓角圖片了,hiahiahia,終于可以站起身跟產品回復了:給我3分鐘,哥給你lu出來,
以上情節,純屬yy與改編,如有雷同,請對號入座,
總結
鴻蒙是一款“面向未來”的作業系統,一款基于微內核的面向全場景的分布式作業系統,現已適配智慧屏,未來它將適配手機、平板、電腦、智能汽車、可穿戴設備等多終端設備,
鴻蒙系統做了很多封裝和擴展屏蔽掉底層的作業,在多智能設備、萬物互聯的5G時代具有很大的優勢,并且經過幾天的玩耍,感覺鴻蒙的開發跟Android開發還是有很多相似之處,對于Android開發人員來說”極其友好“,極其容易上手,
所以讓我們擁抱未來,學習鴻蒙吧,
這是本系列的第一篇,后面還會為大家帶來更多的鴻蒙干貨,敬請期待…,
如果文章對您有一點啟發的話,希望您能點個贊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/76911.html
標籤:AI
上一篇:華為USG內的虛擬系統有可能導致USG系統本身崩潰嗎?
下一篇:某客戶機請求Web 站點服務的以太網資料幀(前 160 位元組)如下圖所示,則客 戶機默認網關的物理地址為(28)。客戶機在查找默認網關的物理地址時使用的協議是(
