如何在 Fresco 库中将 DraweeView 的尺寸设置为 "wrap_content"
How to set dimensions of a DraweeView to "wrap_content" in the Fresco library
我在我的应用程序中使用 Fresco
库来加载图像。
问题是我无法将图像高度设置为 "wrap_content"
,因为 Fresco
库不支持 "wrap_content"
。
那么如何使用 DraweeView
让我的图像看起来不错呢?
我看了这里,但找不到解决这个问题的方法:frescolib/wrap_content
例如:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/intro_image1"
android:layout_width="match_parent"
android:layout_height= // Can't use "wrap_content"
fresco:placeholderImage="@drawable/placeholder_image" />
顺便说一句,图片尺寸为 730*760
对于所有设备上的 dp 到 px 和 px 到 dp,请使用以下公式:
Convert dp to pixel:
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return px;
}
将像素转换为 dp:
public int pxToDp(int px) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int dp = Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return dp;
}
SimpleDraweeView 不直接允许 wrap_content 作为维度。解决方法是扩展 class,正如上面的答案清楚地表明的那样。
使用公式正确找到您需要的指标并以编程方式为您的 draweeview 设置布局参数。
由于您已经知道图像的确切尺寸,因此您可以简单地计算图像的宽高比,然后在 XML 中设置宽高比或Java。
这是开箱即用的,您不需要其他答案中建议的任何自定义视图或 DP/像素计算。
对于您的示例,这将是 w/h = 730/760 = 0.96052631578
现在你可以设置它:
在 XML:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="match_parent" <!-- or the desired width -->
android:layout_height="wrap_content"
fresco:viewAspectRatio="0.96052631578" <!-- your aspect ratio -->
<!-- other attributes -->
或在Java中:
mSimpleDraweeView.setAspectRatio(0.96052631578f); // or whatever your aspect ratio is
我在我的应用程序中使用 Fresco
库来加载图像。
问题是我无法将图像高度设置为 "wrap_content"
,因为 Fresco
库不支持 "wrap_content"
。
那么如何使用 DraweeView
让我的图像看起来不错呢?
我看了这里,但找不到解决这个问题的方法:frescolib/wrap_content
例如:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/intro_image1"
android:layout_width="match_parent"
android:layout_height= // Can't use "wrap_content"
fresco:placeholderImage="@drawable/placeholder_image" />
顺便说一句,图片尺寸为 730*760
对于所有设备上的 dp 到 px 和 px 到 dp,请使用以下公式:
Convert dp to pixel:
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return px;
}
将像素转换为 dp:
public int pxToDp(int px) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int dp = Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return dp;
}
SimpleDraweeView 不直接允许 wrap_content 作为维度。解决方法是扩展 class,正如上面的答案清楚地表明的那样。
使用公式正确找到您需要的指标并以编程方式为您的 draweeview 设置布局参数。
由于您已经知道图像的确切尺寸,因此您可以简单地计算图像的宽高比,然后在 XML 中设置宽高比或Java。 这是开箱即用的,您不需要其他答案中建议的任何自定义视图或 DP/像素计算。
对于您的示例,这将是 w/h = 730/760 = 0.96052631578
现在你可以设置它: 在 XML:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="match_parent" <!-- or the desired width -->
android:layout_height="wrap_content"
fresco:viewAspectRatio="0.96052631578" <!-- your aspect ratio -->
<!-- other attributes -->
或在Java中:
mSimpleDraweeView.setAspectRatio(0.96052631578f); // or whatever your aspect ratio is