我有一个自定义视图组,应包含许多应该可触摸的直接子视图。所以我需要缩放来缩放整个视图而不仅仅是可绘制的部分。
我试图实现自己的解决方案。我在onScale回调中调用requestLayout然后修改子布局。
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int count = getChildCount();
for(int i = 0; i < count; i++){
final View child = getChildAt(i);
float x = DeviceDimensionsHelper.convertDpToPixel(SchemeConstants.OFFSET.getValue()*10, getContext());
float y = DeviceDimensionsHelper.convertDpToPixel(SchemeConstants.OFFSET.getValue()*6, getContext());
x = ((x - mScaleGestureDetector.getFocusX())*mScaleFactor)+mScaleGestureDetector.getFocusX();
y = ((y - mScaleGestureDetector.getFocusY())*mScaleFactor)+mScaleGestureDetector.getFocusY();
if (child.getVisibility() != GONE){
child.layout(
Math.round(x),
Math.round(y),
Math.round(x + child.getMeasuredWidth()*mScaleFactor),
Math.round(y + child.getMeasuredHeight()*mScaleFactor)
);
}
}
}
这只适用于儿童视图在缩放时闪烁一点(很少但他们仍然这样做)。请注意,当捏缩放时,所有内容都应围绕两个手指之间的枢轴点缩放。
我尝试了另一个使用setScaleX,setScaleY和setPivotX,setPivotY的解决方案,但该解决方案闪烁得更多(尽管仍然有效)。
我在stackoverflow上看到了一些带有矩阵的解决方案,但这些解决方案非常本地化(至少对我来说),一旦我尝试使用child.getMatrix.anything,我就会在logcat中遇到崩溃和异常。一些解决方案也适用于较旧的Android版本,所以我想我可能有更新的替代方案。
是否有一个中等难度的解决方案来缩放视图组中的子视图(没有闪烁)?
答案 0 :(得分:1)
如果您还没有找到答案,请尝试一下。 https://github.com/Xjasz/AndroidZoomableViewGroup
我花了好几个小时才开始工作。 我希望它能让别人头疼。