如何缩放图像以在Android平板电脑和纵向模式下显示为背景图像

时间:2017-11-09 23:26:53

标签: android picasso

以下是我的MainActivity屏幕设计

|Top Navigation Bar  
|Content Area
|Bottom Navigation Bar

我想在内容区域中显示背景图片。这填补了整个内容区域

我从下面的服务器获取背景图像是我的JSON响应,如果设备是手机或平板电脑我选择了phonePortrait或tabletPortrait图像来显示背景图像。如果设备是横向使用平板电脑风景图像。此响应由Android和IOS应用程序使用。

{ 
 meta: {
  timeToCache: 5
 },
 body: {
  ....
  title: "LIVE this week",
  description: "NBA",
  phonePortrait: "https://xyx.com.au/home-nba-r1.jpg",
  tabletPortrait: "https://xyx.com.au//home-nba-r2.jpg",
  tabletLandscape: "https://xyx.com.au/home-nba-r3.jpg",
  phoneSmallPortrait: "https://xyx.com.au/home-nba-r4.jpg",
  ....
 }
}

我使用Picasso库将图像加载到backroind imageView

   Picasso.with(getContext())
                    .load(imageUrl)
                    .fit()
                    .into(back_img);

布局文件

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/home_template_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="89dp">
    <ImageView
        android:id="@+id/back_img"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/loginbg"
        android:contentDescription="@string/app_description"
        android:layout_marginLeft="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginRight="0dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="0dp"
        app:layout_constraintTop_toTopOf="parent"
        android:adjustViewBounds="true"
        android:layout_marginTop="0dp"/>
....

</android.support.constraint.ConstraintLayout>

但问题是图像显示不正确(图像拉伸或切割顶部),保持图像宽高比的最佳方法是什么,并显示为所有Android屏幕尺寸的背景图像< / p>

a)我是否需要为纵向模式和横向模式为mdpi / hdpi / xhpdi / xxhdpi引入多个图像?如果是这样,图像尺寸应该是多少?

b)还有其他方法我可以使用单个图像在所有肖像模式下工作,单个图像在横向模式下工作

c)我尝试使用下面的代码,但图像显示不正确

/* DisplayMetrics displayMetrics = new DisplayMetrics();


getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int screenHeight = displayMetrics.heightPixels;
        int screenWidth = displayMetrics.widthPixels;

        int toolBarHeight = getActivity().findViewById(R.id.toolbar).getHeight();
        int bottomBarHeight  = getActivity().findViewById(R.id.tabs).getHeight();

        int viewPortHeight = screenHeight - (toolBarHeight + bottomBarHeight);

        Picasso
                .with(getContext())
                .load(imageUrl)
                //.resize(screenWidth,viewPortHeight) // resizes the image to these dimensions (in pixel)
                .fit()
                .centerInside()
                .into(parent_home_template_back_img);*/

1 个答案:

答案 0 :(得分:1)

尝试使用:

android:scaleType="fitXY"

ImageView

有关详情,请参阅ImageView.ScaleType