我希望能够镜像我的应用程序,以便可以在车辆的挡风玻璃上查看。
我的XML有几个嵌套的LinearLayout
,TextView
和ImageView
。目前我正在改造每一个,虽然它是镜像的,但元素的结构却不是(顶部的内容现在位于底部)。
我一直在寻找好几天,到目前为止已经尝试了几种失败的方法。
使用矩阵在X轴上翻转的动画有效,除了它还原后还是保持不更新,这对于与应用程序交互没有好处。
我只是尝试创建一个自定义LinearLayout
扩展父版本,希望我可以在其onDraw()
方法中应用矩阵,但这会给我一个空白屏幕(我必须设置{{1点击setWillNotDraw(false);
)。
答案 0 :(得分:3)
最终我找到了一个适合我的解决方案(到目前为止,它对用户没有任何问题)。
我的解决方案是覆盖dispatchDraw
以缩放我的自定义LinearLayout中的画布。然后我只需要通过覆盖dispatchTouchEvent
:
public class CustomContainer extends LinearLayout {
public CustomContainer(Context context) {
super(context);
this.setWillNotDraw(false);
}
public CustomContainer(Context context, AttributeSet attrs) {
super(context, attrs);
this.setWillNotDraw(false);
}
public CustomContainer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.setWillNotDraw(false);
}
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
// Flip the view canvas
if (MyHUDActivity.mHUDMode) canvas.scale(1,-1, getWidth(), getHeight()/2f);
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// If in HUD mode then flip the touch zones
if (MyHUDActivity.mHUDMode) event.setLocation(event.getX(), getHeight()-event.getY());
return super.dispatchTouchEvent(event);
}
}
答案 1 :(得分:0)
您可以使用新的动画api来处理水平翻转后的恢复。