使用Matrix和ImageView的x,y进行放大/缩小

时间:2018-03-15 15:32:46

标签: android matrix zoom

我有一个ImageView:

<ImageView
    android:id="@+id/ivHand"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY" />

在活动中,我会执行以下操作:

    ImageView ivBgHand = (ImageView) findViewById(R.id.ivHand);
    Bitmap bitmap = BitmapFactory.decodeFile(photoPath); // Path from storage
    ivBgHand.setImageBitmap(bitmap);

我想使用Matrix和x,y坐标进行放大和缩小,它应该放大(也就是pivotX,pivotY)。谁能帮我这个? (我不想使用ScaleAnimation,因为下一步将是处理更改的矩阵)

2 个答案:

答案 0 :(得分:0)

如果您正在寻找一个简单的库来处理图像视图中的缩放而没有额外的代码,那么我建议您使用PhotoView库。这很简单。

答案 1 :(得分:0)

我找到了一个很棒的解决方案! Source link。 自定义布局视图:

<!-- View which can change matrix of multiple views -->
<com.vitalii.semeruk.model.ZoomView
    android:id="@+id/zoomView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Note: ZoomView should have only one child
     that's why were wrapped these views in RelativeLayout -->
    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- Captured photo -->
        <com.vitalii.semeruk.model.HandView
            android:id="@+id/ivBgHand"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            android:scaleType="fitXY" />

        <!-- Ring -->
        <com.vitalii.semeruk.model.RingPinky
            android:id="@+id/ivRingPinky"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </RelativeLayout>

</com.vitalii.semeruk.model.ZoomView>

请记住,自定义视图应该只有一个孩子,这就是为什么这些视图被包装在RelativeLayout中

zoomTo()

在Activity中使用的方法是:

smoothZoomTo() ZoomView zoomView = (ZoomView) findViewById(R.id.zoomView); zoomView.smoothZoomTo(3f, 86, 908);

示例:

float maxZoom = 2.0f;

要更改最大缩放次数,请将Adapter class替换为符合您需要的值。