我有一个具有HorizontalScrollView内定义的ImageView的一个活动。 图像源是被约束为仅伸展的右边缘以填充屏幕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);
}
....