如何在没有裁剪的情况下实现智能缩放的图像拼贴视图,如Google Keep

时间:2018-04-29 18:41:42

标签: android

我非常喜欢Google Keep中的图片拼贴视图。

enter image description here

我尝试以下库

https://github.com/lopei/collageview

    CollageView collageView = (CollageView) findViewById(R.id.collageView);

    collageView
        .photoMargin(1)
        .photoPadding(3)
        .backgroundColor(Color.RED)
        .photoFrameColor(Color.BLUE)
        .useFirstAsHeader(false)
        .defaultPhotosForLine(3)
        .useCards(true)
        .loadPhotos(new int[] {R.drawable.one, R.drawable.three, R.drawable.two, R.drawable.zero});

我能做到的最好的是

enter image description here

如果你仔细注意。有一个显着的不同。在Google Keep中,它能够更智能地缩放图像,因此无法进行图像裁剪。可以从缩略图中查看所有图像信息。没有信息丢失。

我在想,你有什么想法,我怎样才能达到与Google Keep相同的效果?

1 个答案:

答案 0 :(得分:0)

我已阅读collageview的代码并试用了。

我认为解决方案的关键是在layout_weight上应用正确的ImageView

采取以下示例

Image0 = 1280 x 720
Image1 = 685 x 963
Image2 = 1280 x 856

layout_weight for image 0 = 1 (since its height is the lowest)

layout_weight for image 1 = height0/height1 * width1/width0
                          = 720/963 * 685/1280 = 0.4001168224

layout_weight for image 2 = height0/height2 * width2/width0
                          = 720/856 * 1280/1280 = 0.8411214953

所以,使用以下XML

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:layout_width="0dp"
        android:width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:src="@drawable/three"
        android:adjustViewBounds="true" />

    <ImageView
        android:layout_width="0dp"
        android:width="0dp"
        android:layout_weight="0.4001168224"
        android:layout_height="wrap_content"
        android:src="@drawable/two"
        android:adjustViewBounds="true"/>

    <ImageView
        android:layout_width="0dp"
        android:width="0dp"
        android:layout_weight="0.8411214953"
        android:layout_height="wrap_content"
        android:src="@drawable/one"
        android:adjustViewBounds="true"/>
</LinearLayout>

看起来像这样

enter image description here

这是它的样子,没有应用layout_weightenter image description here