Я пытаюсь отразить LinearLayout.
Чтобы получить эту работу, я расширил LinerLayout, чтобы создать свой собственный компонент View.
Вот как это выглядит:
public class FlipLayout extends LinearLayout implements Runnable {
private boolean isMirroring = true;
private Handler handler;
public FlipLayout(Context context) {
super(context);
this.setWillNotDraw(false);
}
public FlipLayout(Context context, AttributeSet attr) {
super(context, attr);
this.setWillNotDraw(false);
handler = new Handler();
handler.postDelayed(this, 30);
}
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save();
if (isMirroring) {
canvas.rotate(180, getWidth() / 2, getHeight() / 2);
}
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (isMirroring)
event.setLocation(getWidth() - event.getX(),
getHeight() - event.getY());
return super.dispatchTouchEvent(event);
}
@Override
public void run() {
invalidate();
handler.postDelayed(this, 30);
}
}
Этот класс работает хорошо, но только при реализации интерфейса Runnable и при вызове invalidate () каждые несколько миллисекунд.
Если я только вращаю холст без аннулирования представления, изменения дочерних представлений не отрисовываются.
Теперь мне интересно, в чем причина такого поведения и есть ли способ заставить его работать без реализации Runnable / Handler.
Если я удаляю строку canvas.rotate (...), изменения дочерних представлений отображаются правильно (это, например, индикатор выполнения, который часто обновляется).
Я надеюсь, что кто-то может помочь!
Спасибо.
Chris