【软通动力】安卓VSHarmonyOS三方件切换宝典 V2.0(第二部分) 原创

软通田可辉
发布于 2021-6-7 09:53
浏览
19收藏

众所周知,安卓应用开发经过这么多年的发展相对成熟和稳定,HarmonyOS作为后来者兼容一个成熟的开发体系会节省很多推广和开发成本。但在实际开发中,代码层面仍然有很多细节上的差异,会给初次开发人员造成困扰。
本宝典旨在汇总实际开发中第三方件接入时的代码差异,以期帮助开发人员更好的进行开发作业,由于目前接触的开发类型有限,所汇总的内容多少会有疏漏,后期我们会进一步完善和补全。
欢迎关注我们以及我们的专栏,方便您及时获得相关内容的更新。

动画

1.播放一组Animator对象

安卓

AnimatorSet

HarmonyOS

AnimatorGroup

2.设置此AnimatorSet可依次播放所有提供的动画

安卓

AnimatorSet 的 playTogether(Animator... items)方法

HarmonyOS

AnimatorGroup 的runSerially(Animator... items)方法

3.对目标对象的动画属性的支持

安卓

ObjectAnimator

HarmonyOS

AnimatorProperty

4.设置组件的属性动画是否透明化

安卓

ObjectAnimator 的 ofFloat(Object target, String propertyName, float... values),指定propertyName为alpha。例如ObjectAnimator.ofFloat(target, "alpha", 1, 0, 1, 0, 1)

HarmonyOS

AnimatorProperty 的 alpha(float alpha)方法设置透明程度

5.设置组件的属性动画在X轴的变化

安卓

ObjectAnimator 的 ofFloat(Object target, String propertyName, float... values),需要指定propertyName为translationX。例如ObjectAnimator.ofFloat(target, "translationX", 0, 25, -25, 25, -25, 15, -15, 6, -6, 0)

HarmonyOS

AnimatorProperty 的 moveFromX(float value)方法设置X轴移动的起始位置

AnimatorProperty 的 moveToX(float value)方法设置X轴移动的结束位置

6.设置组件的属性动画在Y轴的变化

安卓

ObjectAnimator 的 ofFloat(Object target, String propertyName, float... values),需要指定propertyName为translationY。例如ObjectAnimator.ofFloat(target, "translationY", 0, 0, -30, 0, -15, 0, 0)

HarmonyOS

AnimatorProperty 的 moveFromY(float value)方法设置Y轴移动的起始位置

AnimatorProperty 的 moveToY(float value)方法设置Y轴移动的结束位置

7.设置组件的属性动画在X轴的缩放

安卓

ObjectAnimator 的 ofFloat(Object target, String propertyName, float... values),需要指定propertyName为scaleX。例如ObjectAnimator.ofFloat(target, "scaleY", 1, 1.1f, 1)

HarmonyOS

AnimatorProperty 的 scaleX(float scale)方法设置X轴方向的缩放

8.设置组件的属性动画在Y轴的缩放

安卓

ObjectAnimator 的 ofFloat(Object target, String propertyName, float... values),需要指定propertyName为scaleY。例如ObjectAnimator.ofFloat(target, "scaleX", 1, 1.1f, 1)

HarmonyOS

AnimatorProperty 的 scaleY(float scale)方法设置Y轴方向的缩放

9.设置组件的属性动画按一定的角度旋转

安卓

ObjectAnimator 的 ofFloat(Object target, String propertyName, float... values),需要指定propertyName为rotation。例如ObjectAnimator.ofFloat(target, "rotation", 0, -5, 3, -3, 2, -1, 0)

HarmonyOS

AnimatorProperty 的 rotate(float rotation)方法设置动画变化的角度

10.动画组

安卓

AnimatorSet animatorSet = new AnimatorSet();
playTogether(Animator... items) 动画同时播放
playSequentially(Animator... items) 动画顺序播放

HarmonyOS

AnimatorGroup 
runParallel(Animator ...项目) 指定一组并行播放的动画 
runSerially(Animator ...项目)指定一组连续播放的动画

 

11.属性动画

安卓

view .animate().scaleX(1) .withEndAction(endAnim);

HarmonyOS

view.createAnimatorProperty().scaleX(1).setStateChangedListener(listener).start()

备注

Android直接通过 withEndAction可指定动画结束后的下一个动画,鸿蒙需要通过动画监听器来实现,当前动画完成后在启动下一个动画

12.opengl中的一个类,可以获取图像流

安卓

SurfaceTexture

HarmonyOS

TextureHolder

Canvas绘图

1.根据像素绘图

安卓

canvas.drawBitmap(bitmap, 10, 60, paint); 

HarmonyOS

pixelMapHolder = new PixelMapHolder(pixelMap); drawPixelMapHolderRect(PixelMapHolder holder, RectFloat rect, Paint paint)

2.绘制文字

安卓

canvas.drawText(text, 0, 0, paint); 

HarmonyOS

drawText(Paint paint, String text, float x, float y) 

3.从画布中裁剪指定大写的矩形

安卓

canvas.clipRect(showLeft,showTop,
                showRect.left,showRect.bottom);

HarmonyOS

RectFloat rectFloat = new RectFloat(showLeft,showTop, showRect.left,showRect.bottom);
        canvas.clipRect(rectFloat);

4.画笔的属性设置

安卓

paint.setColor(int  bgColor);            paint.setStyle(Paint.Style.FILL);

HarmonyOS

paint.setColor(Color  bgColor);
paint.setStyle(Paint.Style.FILL_Style);

5.文本对齐方式

安卓

setTextAlign() 设置绘画的文本对齐方式。
getTextBounds(text: CharSequence, start: Int, end: Int, bounds: Rect) 检索文本边界框并存储到边界
setLetterSpacing(letterSpacing: Float)  设置文本的绘画字母间距。


获取文本是否以多行显示。 无(自动换行)

HarmonyOS

public Rect getTextBounds(String text)  获得指定文本的最小矩形边界
public void setTextAlign(int对齐)设置文本对齐方式。
isMultipleLine()获取文本是否以多行显示。
setLetterSpacing(浮动间隔) 设置此Paint的字母间距。

6.可绘制图形

安卓

Drawable mBackDrawable;
mBackDrawable = ta.getDrawable(R.styleable.SwitchButton_kswBackDrawable);
mBackDrawable.setAlpha(255);
mBackDrawable.draw(canvas);

HarmonyOS

Element element = ElementScatter.getInstance(getContext()).parse(ResourceTable.Graphic_background_ability_main);
  element.setAlpha(255);
  element.drawToCanvas(canvas);

7.绘制文字

安卓

   switchText.draw(canvas);

HarmonyOS

 switchText.drawText(canvas);

8.Paint设置阴影效果

安卓

Paint mBorderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBorderPaint.setShadowLayer(mPolygonShapeSpec.getShadowRadius(), mPolygonShapeSpec.getShadowXOffset(),   mPolygonShapeSpec.getShadowYOffset(), mPolygonShapeSpec.getShadowColor());

HarmonyOS

Paint mBorderPaint = new Paint();
BlurDrawLooper blurDrawLooper = new BlurDrawLooper(mPolygonShapeSpec.getShadowRadius(), mPolygonShapeSpec.getShadowXOffset(),
mPolygonShapeSpec.getShadowYOffset(), mPolygonShapeSpec.getShadowColor());
mBorderPaint.setBlurDrawLooper(blurDrawLooper);

9.Paint设置path效果

安卓

mBorderPaint.setPathEffect(new CornerPathEffect(mPolygonShapeSpec.getCornerRadius()));

HarmonyOS

  mBorderPaint.setPathEffect(new PathEffect(mPolygonShapeSpec.getCornerRadius()));

 

 

更多原创,请关注:软通动力HarmonyOS学院https://harmonyos.51cto.com/column/30

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2021-6-8 15:47:19修改
16
收藏 19
回复
举报
11条回复
按时间正序
/
按时间倒序
软通动力HOS
软通动力HOS

加油加油!

回复
2021-6-7 10:01:43
软通小精灵
软通小精灵

加油加油!!!

回复
2021-6-7 10:16:23
芒果爱学习
芒果爱学习

加油加油!!

回复
2021-6-7 10:20:50
芳芳爱学习
芳芳爱学习

加油加油!!

回复
2021-6-7 10:23:57
Tuer白晓明
Tuer白晓明

加油加油!!

回复
2021-6-7 11:40:50
Anzia
Anzia

加油加油!!

回复
2021-6-7 13:13:45
可可学鸿蒙
可可学鸿蒙

加油加油!!

回复
2021-6-7 14:09:52
江湖人称鸿老师
江湖人称鸿老师

加油加油!!

回复
2021-6-7 14:29:20
浩然兄弟
浩然兄弟

加油加油

回复
2021-6-8 09:50:04
娜子开心
娜子开心

加油加油!!

回复
2021-6-8 14:09:54
mb60fe1583666eb
mb60fe1583666eb

AttrSet vs AttributeSet

回复
2021-8-30 15:53:14
回复
    相关推荐