使用node.loadView加载锚点视图出现镜像问题,旋转180度无效求解决
解决视图镜像翻转的几种方法
直接给加载后的视图设置水平翻转
加载视图后,给视图的scaleX属性设为-1f,直接翻转视图本身,和节点旋转的逻辑不同,能精准解决左右镜像问题:val markerView = node.loadView(this@MainActivity, R.layout.marker) markerView.scaleX = -1f修改布局文件实现默认翻转
在marker.xml的根布局里添加android:scaleX="-1"属性,这样视图加载完成后直接就是翻转状态,无需额外代码处理:<!-- 以LinearLayout为例,替换成你布局的根容器 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleX="-1"> <!-- 原布局内容 --> </LinearLayout>调整节点的水平缩放属性
尝试给节点本身设置scaleX=-1f,替代180度旋转——旋转是绕轴转动,而水平缩放翻转是直接镜像坐标系,可能适配你的渲染逻辑:node.scaleX = -1f自定义视图重绘时翻转画布
如果以上方法都不生效,可以自定义视图,在绘制阶段翻转画布:class FlippedMarkerView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) { override fun onDraw(canvas: Canvas) { // 保存画布状态,翻转后恢复 canvas.save() // 以视图中心为基准水平翻转 canvas.scale(-1f, 1f, width / 2f, height / 2f) super.onDraw(canvas) canvas.restore() } }之后把布局里的根视图替换成这个自定义类,或者直接用代码加载该视图。
内容的提问来源于stack exchange,提问作者Gabe Sechan
相关产品推荐
相关产品推荐

