2016-08-29 5 views
0

Я пытаюсь создать простую карту с помощью ImageView внутри TwoDScrollView (так что я могу прокручивать в обоих направлениях одновременно).Сделать ImageView внутри ScrollView в два раза больше, чем экран

Вот мой макет XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:clickable="true" > 

    <com.example.test.TwoDScrollView 
     android:id="@+id/scrollView" 
     android:fillViewport="true" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    </com.example.test.TwoDScrollView> 

</FrameLayout> 

TwoDScrollView взята отсюда: https://github.com/derekbrameyer/CustomScrollViews/blob/master/library/src/com/doomonafireball/customscrollviews/widget/TwoDScrollView.java

Тогда вот ява код:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View root = inflater.inflate(R.layout.fragment_area, container, false); 

    scrollView = (TwoDScrollView) root.findViewById(R.id.scrollView); 

    MainActivity act = (MainActivity) getActivity(); 
    Drawable map = act.getResources().getDrawable(R.drawable.my_map); 

    Bitmap bitmap = ((BitmapDrawable) map).getBitmap(); 

    int viewWidth = container.getWidth(); 
    int viewHeight = container.getHeight(); 

    int imageWidth = bitmap.getWidth(); 
    int imageHeight = bitmap.getHeight(); 

    int desiredHeight = viewHeight * 2; 

    float r = desiredHeight/(float) imageHeight; 

    int desiredWidth = (int) (imageWidth * r); 

    ImageView imageView = new ImageView(act); 
    imageView.setAdjustViewBounds(true); 
    imageView.setImageBitmap(bitmap); 
    imageView.setScaleType(ImageView.ScaleType.FIT_XY); 

    scrollView.addView(imageView); 

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(desiredWidth, desiredHeight); 
    imageView.setLayoutParams(params); 
    imageView.invalidate(); 

    return root; 
} 

В моем случае значения:

viewWidth = 1440

viewHeight = 2308

ImageWidth = 2000

ImageHeight = 1603

desiredWidth = 5759

desiredHeight = 4616

г = 2,8796008

Все же - это игнорируется. Высота изображения слишком мала (я вижу часть фона), ширина слегка прокручивается.

Как это исправить?

С уважением

+0

Каков результат 'adb shell dumpsys activity top'? – pskink

+0

Это слишком долго, поэтому я отправляю его на pastebin: http://pastebin.com/1z3VQrAk – Makalele

+0

в иерархии представлений нет 'TwoDScrollView' (начиная с строки # 53 в вашем выходе) – pskink

ответ

0

Таким образом, вместо того, чтобы использовать TwoDScrollView я только ImageView с жесты поддержки здесь (мне нужно было это так или иначе):

https://github.com/thuytrinh/android-collage-views

И я просто заставить его изменить масштаб мой ImageView на startup:

listener = new MultiTouchListener(); 
listener.minimumScale = 2.0f; 
listener.maximumScale = 8.0f; 
listener.isRotateEnabled = false; 
TransformInfo info = new TransformInfo(); //had to extract this class to different file 
info.deltaScale = 2.0f; 
info.deltaAngle = 0.0f; 
info.deltaX = 0.0f; 
info.deltaY = 0.0f; 
info.pivotX = 0.0f; 
info.pivotY = 0.0f; 
info.minimumScale = listener.minimumScale; 
info.maximumScale = listener.maximumScale; 
imageView.setOnTouchListener(listener); 
MultiTouchListener.move(imageView, info); //had to make it public 
Смежные вопросы