Ужасное качество растрового изображения ImageView?

у меня есть заставка с ImageView играет роль фона. Независимо от того, разрешаю ли я масштабировать свое растровое изображение (что я и делаю), качество изображения ужасное. Я думаю, это уменьшает глубину цвета. Я уже огляделся, и одним из предложений было разместить мой образ в raw вместо drawable но это не помогло. Вот скриншот:

enter image description here

что именно здесь происходит и как это исправить это?

EDIT: я не применял это растровое изображение программно, поэтому нет соответствующего кода Java. Вот код XML для этого действия:

<?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:id="@+id/RelativeLayoutSplash"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:drawingCacheQuality="high"
    android:orientation="vertical"
    android:padding="@dimen/splash_padding"
    android:scrollbarAlwaysDrawVerticalTrack="true"
    tools:context=".SplashActivity" >

    <ImageView
        android:id="@+id/ImageViewBg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@string/logo_description"
        android:scaleType="centerCrop"
        android:src="@drawable/splash_bg_register" />

    <ImageView
        android:id="@+id/ImageViewLogo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@string/logo_description"
        android:maxHeight="@dimen/logo_maxheight"
        android:maxWidth="@dimen/logo_maxwidth"
        android:layout_centerVertical="true"
        android:src="@drawable/logo" />

    <TextView
        android:id="@+id/TextViewCopyright"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="@string/copyright"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@color/white_50"
        android:textSize="@dimen/copyright_size" />

</RelativeLayout>

EDIT: я пробовал getWindow().setFormat(PixelFormat.RGBA_8888); как было предложено, что сделало видимую разницу, но кольцевание все еще присутствует. этой образ я использую в качестве фона.

8 ответов


кольцевание происходит в основном при нарушении соотношения сторон изображения.

вы можете попробовать любой из следующих вариантов:

  1. сделайте свой образ .9.png. В этом случае он автоматически зафиксирует любые растяжки и позаботится о кольцевании.

  2. нанесите поверхностное колебание на изображение, которое может предотвратить любые необычные полосы.

    <bitmap
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/b1"
        android:tileMode="repeat"
        android:dither="true" />
    

каковы размеры вашего изображения? И что это за устройство? Я подозреваю, что размер изображения не соответствует размеру дисплея, и он находится в неправильной папке для рисования ресурсов. Изображение выглядит довольно масштабных. Эти статьи должны помочь вам выбрать разрешение изображения и папку ресурсов для разных экраны.

http://developer.android.com/guide/practices/screens_support.html

http://developer.android.com/training/multiscreen/index.html


вы должны установить цвет окна. В своей деятельности положите что-то вроде этого:

getWindow().setFormat(PixelFormat.RGBA_8888);

Я предполагаю, что размер изображения меньше, чем область, в которой отображается изображение. Таким образом, может быть изображение масштабируется и теряет качество.

What you can try is:

1. Either put the image of similar dimension 
2. use 9 patch image ( good idea )

вам нужно изменить размер изображения на разные размеры и поместить их в соответствующие папки для рисования под res/


попробуйте antialias это может решить вашу проблему.

создайте растровое изображение с приведенным ниже xml.

<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/background"
    android:antialias="true"
    android:dither="true"  />

то, что вы делаете, это установить изображение в xml, что гораздо больше зависит на то, что поддержка разрешения изображения .

существует несколько папок для каждой поддерживаемой плотности нескольких устройств, поместите свое изображение в какую-нибудь подходящую папку dpi .

пожалуйста, обратитесь по этой ссылке для негоhttp://developer.android.com/guide/practices/screens_support.html

см. тот же значок приложения, как вести себя неуверенно в разных папка

пример приложения без поддержки различных плотностей, как показано на экранах с низкой, средней и высокой плотностью

Example application without support for different densities, as shown on low, medium, and high density screens.

enter image description here

пример приложения с хорошей поддержкой различных плотностей (это независимая плотность), как показано на экранах с низкой, средней и высокой плотностью.


просто настройте его, сделав изображение фоновым. Вот пример кода

   <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/your_image"
    />