很难相信这是不可能的。我在ImageViewTouch
视图中有一个地图,我正试图在我根据用户的位置移动(在地图图像内)的图像上添加一个"你在这里"图像。
当用户在地图上平移时,我希望你在这里也通过在ImageViewTouch
内平移。(理想情况下,我也希望它缩放,但我会采取我能得到的!)
我考虑过使用Canvas
来创建一个新的Bitmap
每次用户的位置变化,但考虑到地图很大,它不会是非常性能。
有什么办法可以做到吗?
我明白了!而不是使用Canvas
和Bitmap
,这是较慢的,导致问题,我能够使用LayerDrawable
。如果这对将来有帮助,这是我的代码。
public void updateYouAreHere(@Nullable MapLocation location, boolean initial){
Resources resources = getResources();
Drawable drawable;
if (location == null){
drawable = MiscUtil.getDrawable(resources, R.drawable.map_image);
}else{
Drawable[] layers = new Drawable[]{
MiscUtil.getDrawable(resources, R.drawable.map_image),
MiscUtil.getDrawable(resources, R.drawable.you_are_here)
};
mapDrawable = new LayerDrawable(layers);
final int iconWidth = 50;
final int iconHeight = 86;
mapDrawable.setLayerInset(1, location.x, location.y,
(int)(Globals.Map.MapWidth) - location.x - iconWidth, (int)(Globals.Map.MapHeight) - location.y - iconHeight);
drawable = mapDrawable;
}
if (!initial) {
Matrix currentPosition = mapScrollView.getDisplayMatrix();
float minScale = mapScrollView.getMinScale();
float maxScale = mapScrollView.getMaxScale();
mapScrollView.setImageDrawable(drawable, currentPosition, minScale, maxScale);
}else{
mapScrollView.setImageDrawable(drawable);
}
}
private class MapLocation {
public int x;
public int y;
public MapLocation(int x, int y){
this.x = x;
this.y = y;
}
}
另外,MiscUtil.getDrawable
只是一个包装器,根据SDK版本调用相应的getResources().getDrawable()
函数。