【软通动力】安卓VSHarmonyOS三方件切换宝典 V2.0(第二部分) 原创
众所周知,安卓应用开发经过这么多年的发展相对成熟和稳定,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
加油加油!
加油加油!!!
加油加油!!
加油加油!!
加油加油!!
加油加油!!
加油加油!!
加油加油!!
加油加油
加油加油!!
AttrSet vs AttributeSet