предисловие
После просмотра запуска системы Hongmeng 2.0, вам не терпится разработать первую программу Hongmeng?В Интернете есть много статей, в которых рассказывается о системе Hongmeng, ее отличиях от Android и о том, как писать статьи HelloWorld.Я не буду копировать и вставить сюда. .
Давайте сегодня изменим трюк и посмотрим, как реализовать некоторые распространенные функции и эффекты в Android, потому что Hongmeng только вышел, все не очень зрело (артефактов предшественников нет), полагаться можно только на собственный X-код, а не много ерунды, давай Давайте посмотрим, как реализовать базовую функцию округления изображения в системе Hongmeng.
В настоящее время большинство художников добавляют закругленные углы к изображениям при разработке стилей.В процессе разработки Hongmeng они обязательно столкнутся с необходимостью переработать изображения и добавить закругленные углы или круглые изображения.
Android产品:这个图加下圆角吧,应该花不了你3分钟吧?
开发小蒙:喵的,这是鸿蒙,没有glide,怎么玩,给我3天先 。
Android产品:gun,忽悠老子呢,你以为我第一天当产品么?圆角这么简单的事,还需要3天,你是不是花2天半打酱油去了么。
开发小蒙:卒。。。。。。
Ведь Сяомэн — ветеран Android-разработки с многолетним стажем, как он мог так легко признать поражение?Фон интерфейса серый, фон раскладки картинок красный, а в раскладку картинок помещается квадратная картинка, которая разрезается на прямоугольник со скругленными углами, так как же достигается такой эффект?
В прошлом в процессе разработки Android для достижения этого эффекта использовались следующие три обычных решения. 1. Используйте скольжение
2. Пользовательское изображение
3. Непосредственная операция рисования изображения
В системе Hongmeng на данный момент нет 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;
}
}
После вышеуказанных шагов вы можете сделать округленное изображение версии Hongmeng, hiahiahia, вы, наконец, можете встать и ответить продукту: дайте мне 3 минуты, брат даст вам лу.
Приведенный выше сюжет чисто ыы и адаптация, если есть какие-то сходства, прошу садиться.
Суммировать
Hong Meng - это «ориентированная на будущее» операционная система, основанная на микроядре распределенной операционной системы для всей сцены, и теперь мудрость адаптации экрана, будущее будет соответствовать телефонам, планшетам, ПК, смарт-автомобилям, носимым устройствам и другому терминальному оборудованию.
Система Hongmeng провела большую инкапсуляцию и расширение, чтобы защитить нижний слой.У нее есть большие преимущества в эпоху 5G мульти-умных устройств и Интернета всего.После нескольких дней игры я чувствую, что развитие Hongmeng имеет много общего с разработкой Android. Он «чрезвычайно удобен» для разработчиков Android и чрезвычайно прост в использовании.Итак, давайте примем будущее и изучим Хунмэн.
Это первая статья в этой серии, и позже мы представим вам больше галантереи Hongmeng, так что следите за обновлениями....
Если статья вас немного вдохновила, надеюсь, вы поставите лайк.