У меня есть активность, которая имеет ImageView, определенную внутри HorizontalScrollView. Источник изображения представляет собой файл с 9 патчами, который ограничен, чтобы растянуть только правый край, чтобы заполнить экран. Я реализовал функцию простого масштабирования, которая позволяет пользователю дважды увеличивать и уменьшать масштаб, изменяя размер растрового изображения и назначая новое растровое изображение для представления. Моя текущая проблема заключается в том, что при удвоении нажатия, чтобы уменьшить масштаб, 9-патч не применяется, когда я назначаю новое изменение размера растрового изображения в представление. Другими словами, вместо растяжения только правого края, как определено в файле с 9 патчами, он растягивал все изображение.
Вот мой XML:
<HorizontalScrollView
android:id="@+id/hScroll"
android:fillViewport="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fadingEdge="none" >
<RelativeLayout
android:id="@+id/rlayoutScrollMap"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imgResultMap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:src="@drawable/map_base"/>
</RelativeLayout>
</horizontalScrollView>
Ниже приведена соответствующая часть моего кода внутри вызова onDoubleTap():
public boolean onDoubleTap(MotionEvent e)
{
if (zoom == 1) {
zoom = 2; // zoom out
} else {
zoom = 1; // zoom in
}
Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.map_base);
Bitmap bmp = Bitmap.createScaledBitmap(image, image.getWidth() * zoom, image.getHeight() * zoom, false);
ImageView imgResultMap = (ImageView)findViewById(R.id.imgResultMap);
imgResultMap.setImageBitmap(bmp);
return false;
}
РЕДАКТИРОВАТЬ. Проведя некоторое исследование, я понял. Вместо того, чтобы просто манипулировать растровым изображением, мне нужно также включить фрагмент 9-патча, который не является частью изображения растрового изображения, для повторной сборки нового 9-патча. См. Пример кода ниже:
...
else {
// Zoom out
zoom = 1;
Bitmap mapBitmapScaled = mapBitmap;
// Load the 9-patch data chunk and apply to the view
byte[] chunk = mapBitmap.getNinePatchChunk();
NinePatchDrawable mapNinePatch = new NinePatchDrawable(getResources(),
mapBitmapScaled, chunk, new Rect(), null);
imgResultMap.setImageDrawable(mapNinePatch);
}
....