我一直在尝试根据主页中的所有屏幕尺寸宽度和高度来实现facebook图像加载宽度和高度。
下面我发布了迄今为止我尝试过的代码。
我尝试过两种方式:
第一种方式:
home_activity_layout.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
>
<LinearLayout
android:id="@+id/rl_vertical_list"
android:visibility="visible"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/post_items_layout_middle_home"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_marginTop="10dp" >
<com.steve.thirdparty.ScalableImageView
android:id="@+id/iv_posted_img_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_centerHorizontal="true"
android:src="@drawable/golive_load_image"
android:layout_below="@+id/tv_user_posted_msg_post_items_home"
android:contentDescription="@string/cont_desc"/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
ScalableImageView.java:
public class ScalableImageView extends ImageView {
public ScalableImageView(Context context) {
super(context);
}
public ScalableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScalableImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Drawable d = getDrawable();
if (d != null) {
int w = MeasureSpec.getSize(widthMeasureSpec);
int h = w * d.getIntrinsicHeight() / d.getIntrinsicWidth();
Log.e("Width", ""+w);
Log.e("Height", ""+h);
setMeasuredDimension(w, h);
}
else super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
但是我没有获得不同维度图像的预期结果。它不会超过更高密度像素图像的高度。
第二种方式:
获取屏幕宽度和高度并进行一些计算:
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
float screenHeight= displayMetrics.heightPixels / displayMetrics.density;
float screenWidth = displayMetrics.widthPixels / displayMetrics.density;
if(ImageHeight > ImageWidth)
{
float scale = ImageWidth/ImageHeight
float screenWidth = 320 (for example)
float getHeight = screenWidth /scale
}
以这种方式,在主页中没有显示非常高密度的像素图像。
任何人都可以帮助我。谢谢。
答案 0 :(得分:1)
我用两种方式解决了这个问题:
第一种方式:
我已经使用ImageView进行了一些更改。我删除了imageview的外部类。使用imageview width
和height
使用adjustviewbounds
将内容制作的图像视图包装到所有屏幕设备。< / p>
<ImageView
android:id="@+id/iv_posted_img_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitStart"
android:src="@drawable/load_image"
android:layout_below="@+id/tv_user_posted_msg_post_items_home"
android:contentDescription="@string/cont_desc"/>
注意:使用width和height wrapcontent会导致内存出错。
第二种方式:
此解决方案是最安全的解决方案,不会超出内存不足错误。
在json响应中,我得到了imageview的宽度和高度。所以我使用宽度和高度处理适配器中的所有imageview。
适配器代码:
if(rowItem.getWidthImage() != null){
if(rowItem.getWidthImage().equals(null) || rowItem.getWidthImage().equals("")){
Log.e("InvalidImage", "Test");
}else {
Log.e("imageWidth", ""+rowItem.getWidthImage());
Log.e("imageHeight", ""+rowItem.getHeightImage());
int imageWidth = Integer.parseInt(rowItem.getWidthImage());
int imageHeight = Integer.parseInt(rowItem.getHeightImage());
DisplayMetrics dm = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = width * imageHeight / imageWidth;
params = new LinearLayout.LayoutParams(width, height);
holder.ivPostedImageNew.setLayoutParams(params);
holder.llPostedImage.addView(holder.ivPostedImageNew);
Glide.with(context).load(rowItem.getPosteduserpostimage()).placeholder(R.drawable.golive_load_image).error(R.drawable.bg_golive).into(holder.ivPostedImageNew);
}
}
有关详情:请参阅here