Как программно повторно применить a ImageView?

У меня есть действие, в котором ImageView определено внутри HorizontalScrollView. Источником изображения является файл с 9 патчами, который ограничен растягиванием только правого края, чтобы заполнить экран. Я реализовал простую функцию масштабирования, которая позволяет пользователю дважды нажать для увеличения и уменьшения масштаба, изменяя размер растрового изображения и назначая новое растровое изображение представлению Моя текущая проблема заключается в том, что когда dou bling нажав, чтобы уменьшить масштаб, 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);
 }

  ....
5
задан Kenny 17 May 2012 в 01:10
поделиться