我有 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 。
当比例为1(无缩放)时,与儿童视图的交互很好,但随着缩放我的缩放,就像触摸区域被翻译或其他东西一样,因为我不能再点击它们了。
我该如何解决这个问题?我试图像这样覆盖 ZoomableRelativeLayout 中的 onMeasure ;
@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));
}
如果有人可以的话,请帮助我!
好的,所以我改用了使用Matrix并使用画布比例来跟随;
@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>
我可以在布局中移动,一切都很好,但是当我缩放时,作为 ZoomableRelativeLayout 的孩子的RelativeLayouts不会被缩放..我该如何解决这个问题?我是否必须继承RelativeLayouts并覆盖 onMeasure()或 onLayout()或其他任何内容?
答案 0 :(得分:2)
您在dispatchDraw()
中所做的事实上只是缩放视图的绘图,而不是视图本身。视图的位置和大小(左,上,右,下)仍然相同,但您会看到画布中的视图正在缩放。试试这个:稍微缩放ZoomRelativeLayout
,然后在原始(非缩放)位置与孩子互动,看孩子是否有所反应。
要真正缩放视图/视图组,您需要转换实际视图,而不仅仅是绘图,即转换视图的(l,t,r,b),然后{ {1}} requestLayout()
,但这可能会影响效果。