缩放GIF以适合水平ListView

时间:2016-11-26 22:27:22

标签: java android

我有一堆不同大小的GIF,我想在水平ListView中对齐,以便它们具有相同的高度,显然不一定是相同的宽度。

我们正在使用https://github.com/koral--/android-gif-drawable

实施例: enter image description here

Gif显示xml

: $3.charAt(0).toUpperCase() + $3.slice(1)

容器

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:paddingLeft="10dp"
    android:id="@+id/holder"
    android:paddingTop="5dp"
    android:paddingBottom="5dp">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <pl.droidsonroids.gif.GifTextureView
            android:layout_width="100dp"
            android:id="@+id/gif_rec_view"
            android:layout_height="100dp"
            android:layout_centerHorizontal="true"
            />
    </RelativeLayout>

</RelativeLayout>

将gif加载到视图中:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_below="@+id/title1"
    android:layout_marginTop="5dp"
    android:background="@android:color/transparent"
    android:id="@+id/xD">
    <com.devsmart.android.ui.HorizontalListView
        android:id="@+id/gif_search_1"
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:background="#e3e3e3"
        />
</RelativeLayout>

我怎样才能最好地解决这个问题? 试了一堆东西。

final GifTextureView textureView = (GifTextureView) convertView.findViewById(R.id.gif_rec_view);
LoadGif gLoad = new LoadGif(_objects.get(position).url, textureView);
gLoad.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null);

编辑1:

所以看看这个帖子:How to scale an Image in ImageView to keep the aspect ratio

使用

//textureView.setLayoutParams(new RelativeLayout.LayoutParams(_objects.get(position).width, _objects.get(position).height));
//RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
//params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
//textureView.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

创造奇迹,但图像裁剪如下:

enter image description here

android:adjustViewBounds="true"
android:scaleType="centerCrop"

根本不起作用。

1 个答案:

答案 0 :(得分:0)

好的,这就是我设法解决它的方法:

Gif显示xml

<pl.droidsonroids.gif.GifTextureView
    android:layout_width="150dp"
    android:layout_height="match_parent"
    android:id="@+id/gif_rec_view"
    android:layout_centerHorizontal="true"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    />

适配器

/*Absolutely fucking ridiculous*/
textureView.setLayoutParams(new RelativeLayout.LayoutParams(Utils.pxToDp(_objects.get(position).width), Utils.pxToDp(_objects.get(position).height)));

Utils ......

public static int pxToDp(int px)
{
    //return (int) (px / Resources.getSystem().getDisplayMetrics().density);
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, px, Resources.getSystem().getDisplayMetrics());
}

enter image description here

希望这可能会帮助一些孤独的流浪者。