У меня есть приложение для Android 2.1 , где у меня есть корневая раскладка для детей, которую я могу щелкать, перемещать и масштабировать.Все в порядке, пока макет корня не увеличен.
У меня есть такая настройка;
<ZoomableRelativeLayout ...> // Root, Moveable and zoomable
<ImageView ....>
<RelativeLayout ...> // Clickable, moveable and zoomable
<RelativeLayout ...> // Clickable, moveable and zoomable
</ZoomableRelativeLayout>
И мне нравится увеличивать содержимое в моем ZoomableRelativeLayout .Я так масштабирую свое содержимое в своем классе ZoomableRelativeLayout;
protected void dispatchDraw(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.scale(mScaleFactor, mScaleFactor, mXPointCenter, mYPointCenter);
super.dispatchDraw(canvas);
canvas.restore();
}
Я получаю желаемый результат масштабирования, но проблема в том, что я хочу щелкнуть по Childviews до ZoomableRelativeLayout , когда canvasмасштабируется ..
Когда масштаб равен 1 (без масштабирования), взаимодействие с дочерними представлениями в порядке, но при масштабировании по мере увеличения масштабирования он аналогичен переводу области касания или чего-то еще, потому что я не могу нажатьих больше.
Как мне это исправить?Я пытался переопределить onMeasure в ZoomableRelativeLayout вот так;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension((int) (widthSize * mScaleFactor), (int) (heightSize * mScaleFactor));
}
Пожалуйста, помогите мне, если кто-нибудь может!
Хорошо, такЯ перешел с использования матрицы и масштабирования холста на следующее:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int count = getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != View.GONE) {
child.layout((int) mPosX, (int) mPosY, (int) (mPosX + getWidth()), (int) (mPosY + getHeight()));
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension((int) (widthSize * mScaleFactor), (int) (heightSize * mScaleFactor));
}
У меня все еще есть настройки;
<ZoomableRelativeLayout ...> // Root, Moveable and zoomable
<ImageView ....>
<RelativeLayout ...> // Clickable, moveable and zoomable
<RelativeLayout ...> // Clickable, moveable and zoomable
</ZoomableRelativeLayout>
Я могу перемещаться по макету, и все в порядке, но когда язум, RelativeLayouts, который является детским ZoomableRelativeLayout , не масштабируется .. Как я могу это исправить?Нужно ли создавать подкласс RelativeLayouts и переопределять onMeasure () или onLayout () или что-нибудь еще?