安卓:处理图像尺寸为多个屏幕(Android: Handling images size for m

2019-07-19 12:07发布

我觉得真的很难与Android处理图像,我认为这是Android开发最难的部分...

1)我有一个形象,我想这是我的应用程序,所以我做的背景

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" 
    android:background="@drawable/accueil">
</RelativeLayout>

背景应填满整个屏幕,但它不是CAS。 只有背景的一部分被示出在一些(小)的屏幕。 我怎么能说:我想要的图像,以填补所有的屏幕即使图像是更大然后屏幕上的图像应减少,所以我看到所有的背景是什么?

也许我应该把我的背景,而不是使用它作为背景的

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity">


       <ImageView
           android:id="@+id/imageView1"
           android:layout_width="500dp"
           android:layout_height="500dp"
           android:adjustViewBounds="false"
           android:src="@drawable/accueil" />

</RelativeLayout>

然而,在某些设备上的图像是位裁剪。

2)I必须放置一个布局另一布局,但我想它的位置是精确的,它的宽度是相对于亲本的布局。 然而,如果我做

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/fond">

 <LinearLayout
     android:layout_width="300dp"
     android:layout_height="350dp"
     android:layout_marginTop="20dp"
     android:background="@drawable/fondshare"
     android:orientation="vertical" >

你可以看到的结果不是我所期待(线性布局是与笑脸矩形和所有的按钮)

Answer 1:

的Android归类使用两种一般特性设备屏幕:尺寸和密度。 你应该想到,您的应用将与范围大小和密度屏幕的设备安装。 因此,你应该包括优化您的应用程序的不同的屏幕大小和密度的外观的一些替代资源。 有四种广义的尺寸:小,中,大,xlargeAnd广义的密度:低(LDPI),中(MDPI),高(华电国际),特高(xhdpi)

要声明不同的布局和位图要使用不同的屏幕上,你必须在不同的目录,类似于你如何为不同的语言字符串做将这些替代资源。

另外要注意的是,屏幕方向(横向或纵向)被认为是屏幕尺寸的变化,因此许多应用程序应该修改布局,优化每个方向的用户体验。

见android.com的“支持不同的屏幕”的文章以了解更多信息。



Answer 2:

我认为,如果你想使用位图作为背景,也有解决方案的一些方法:

  1. 针对不同设备设计形象的几个尺寸。(绘制,华电国际,绘制-xhdpi ...)
  2. 使用不同的布局,并把它们变成使用预选赛不同的资源包。(布局sw600dp ...)


Answer 3:

我建议你调整你对每个布局文件夹布局和绘制文件夹。

布局布局为800×480的布局,土地等。这里指http://developer.android.com/guide/practices/screens_support.html

或者参考此链接。

对于不同的屏幕分辨率设计UI



Answer 4:

试试这个:

我所遇到的问题,很多时候我的布局deigns.Finally我得到一个解决方案,就像

我已创建了不同的屏幕像小和大的布局文件夹。 原单布局文件夹的XML文件是正常的布局是HVGA因此,与创建文件夹唯一的工作=布局小的小的布局,并在这儿的XML文件。 然后,您创建的文件夹名称的文件夹=布局,长在这里为布局大布局AMD的XML文件。



Answer 5:

得到这个任务完成的最好的方法是使用线性布局和使用

 <LinearLayout
 android:layout_width="300dp"
 android:layout_height="350dp"
 android:layout_marginTop="20dp"
 android:weightSum="3"
 android:background="@drawable/fondshare"
 android:orientation="vertical" >

  <View
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    />

  </LinearLayout>

在上述情况下

机器人:weightSum =“零件数量要在划分布局”

机器人:layout_weight = “1”

共有部分由您的视图占据。 假设线性布局的那weightsum是3于是由图覆盖的部分会

来看宽度

(layout_width / WeightSum)*重量

视高

(layout_height / WeightSum)*重量

你的情况您认为最终高度将是= 119dp

和最终宽度将是= 100dp



Answer 6:

最近,我不得不做一些类似的。 因此,这里有一些技巧。

如果您想保留图像的长宽比,在一个相对布局使用。 注意:相对布局的布局宽度和高度应match_parent或FILL_PARENT。

<ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:id="@+id/bgloginpage"

        android:scaleType="centerCrop" />

这将从其中心裁剪图像。 还有其他的选择,以及。 使用fitXY代替centerCrop以适合,它给设备没有考虑到纵横比。 对于这个最佳效果,使用相当大的图像。

另一种选择是一个坚实的背景颜色足够添加到您的形象,增加其大小。 加载到您的可绘制文件夹,并使用这个类。

public class ReturnBackGroundImage {



//To avoid java.lang.OutOfMemory exceptions, check the dimensions of a    bitmap before decoding it,
// unless you absolutely trust the source to provide you with predictably sized image data that
// comfortably fits within the available memory.

public static Bitmap decodeSampledBitmapFromResource(Resources resources,    int resId, int reqWidth, int reqHeight, boolean UseDeviceHeight, Activity  activity) {


    if(UseDeviceHeight){
        DisplayMetrics metrics = new DisplayMetrics();

        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        reqHeight = metrics.heightPixels;
        reqWidth = metrics.widthPixels;
    }

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(resources, resId, options);
    return ResizeImage(resources,options,resId,reqWidth,reqHeight);
}

public static Bitmap ResizeImage(Resources resources,BitmapFactory.Options options, int resId, int reqWidth, int reqHeight) {

    double imageHeight = options.outHeight;
    double imageWidth = options.outWidth;
    double ratio = reqHeight / imageHeight;
    int newImageWidth = (int) (imageWidth * ratio);
    Bitmap bMap = BitmapFactory.decodeResource(resources, resId);
    return  getResizedBitmap(bMap, reqHeight, newImageWidth);
   }
}

如下使用它

ImageView v = (ImageView)findViewById(R.id.bgloginpagew);
  v.setImageBitmap(ReturnBackGroundImage.decodeSampledBitmapFromResource(getResources(),R.drawable.mainbgforapp,0,0,true,walkThroughActivity.this));

这是从Android网站的例子的修改版本。

如果有人需要比保存不同大小的图像,它是

  1. xxxhdpi / xxhdpi = 4/3
  2. xxxhdpi / xhdpi = 2/1
  3. xxhdpi / HDPI = 2/1
  4. xhdpi / MDPI = 2/1

据我所知,这些比率仅适用于正方形图像。 想我最好把它放在那里了一些人谁需要他们,像我一样。



文章来源: Android: Handling images size for multiple screens