【发布时间】:2013-12-24 05:53:35
【问题描述】:
我最近升级到了 Android 4.4,但我的应用程序的某些功能令人惊讶地停止工作。
我有这段代码用于初始化然后绘制我的自定义视图。基本思想是调整缩放级别,使整个视图适合屏幕。
private void initAtZoomLevel(float zoomLevel){
....
Matrix transformMatrix = new Matrix();
transformMatrix.setScale(initialZoomLevel, initialZoomLevel);
float yTransCenter = (screenHeight - mapHeight)/2.0f;
setImageMatrix(transformMatrix);
}
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
float[] values = new float[9];
getImageMatrix().getValues(values);
scaleFactor = values[0];
....
}
这适用于我拥有的 ANDROID 4.1.2 和 4.2.2 设备
但在 Android 4.4/4.3 getImageMatrix().getValues(values) 上停止工作!
它返回一个单位矩阵,而不是我期望在应用启动时的变换矩阵!
调试打印输出:
4.1.2:@setImageMatrix(transformMatrix):transformMatrix = Matrix{[0.025122833, 0.0, 0.0][0.0, 0.025122833, 566.5][0.0, 0.0, 1.0]}
@getImageMatrix().getValues(values):transformMatrix = Matrix{[0.025122833, 0.0, 0.0][0.0, 0.025122833, 566.5][0.0, 0.0, 1.0]}
4.4:@setImageMatrix(transformMatrix):transformMatrix = Matrix{[0.025122833, 0.0, 0.0][0.0, 0.025122833, 553.0][0.0, 0.0, 1.0]}
@getImageMatrix().getValues(values):transformMatrix = Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}
我环顾四周,似乎找不到任何关于此的文档。不知何故,我的视图的图像矩阵正在被重置; Android 4.4 是否改变了我们应该这样做的方式?有没有其他人遇到过这个问题?
注意:问题似乎源自 Android 4.3 - 在模拟器上运行时也会出现同样的问题
更新:我已经检查了change log from 4.2 to 4.3,但在 Matrix 类上方我看不到任何东西,或者与 View 类相关的任何东西。
更新 2:我的捏拉缩放也不起作用,它使用相同的 setImageMatrix() 方法 - 显然没有粘住,因为 getImageMatrix().getValues() 没有任何反应
【问题讨论】:
-
尝试在Android版本之间区分getImageMatrix的实际源代码
-
@GenericHolidayName 如果仔细观察,它实际上并没有保存/返回相同的矩阵(
getImageMatrix和setImageMatrix之间的字段名称不同) -
stackoverflow.com/questions/30446099/… 有谁知道这个问题吗?
标签: android android-custom-view android-4.4-kitkat android-4.3-jelly-bean