安卓:在布局背景中图像质量差

4

在发布这个问题之前,我尝试了所有在 Android 部分找到的答案,但都没有成功...
由于某些原因,设备中的图像质量很差,而在 Eclipse 和虚拟设备中的图像质量非常好。
请看下面的屏幕截图示例:示例 http://img714.imageshack.us/img714/1358/84044294.jpg

我该怎么办? 我尝试使用 72dpi 和 300dpi 制作图片,PNG/JPG 分辨率为 1280x800,但都没有任何作用...
请帮帮我!!

这是我的 LiveNewsActivity.java,也许我做错了什么?

package com.prog.livenews;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;


public class LiveNewsActivity extends Activity {
/** Called when the activity is first created. */

//############################
//######### VARS #############

Button login;
Button register;

//############################
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    getWindow().setFormat(PixelFormat.RGBA_8888);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.bg, options);

    findViewById(R.id.frameLayout1).setBackgroundDrawable(new BitmapDrawable(gradient));

    login = (Button) findViewById(R.id.main_login_button);
    register = (Button) findViewById(R.id.main_register_button);



    login.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            startActivity(new Intent("com.prog.livenews.LOGIN"));
        }
    });

    register.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            startActivity(new Intent("com.prog.livenews.REGISTER"));
        }
    });


}

}

1
DPI与此无关。这是机器带状效应,表明背景以太低的位深度显示(例如,在8位模式下显示32位渐变)。 - Marc B
4个回答

7

试试这个:

在你的第一个活动的setContentView(layoutId)之前使用它。

getWindow().setFormat(PixelFormat.RGBA_8888);

在您的第一个活动中调用setContentView(layoutId)之后,您可以加入下面的代码:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inDither = true;
options.inScaled = false;
options.inDither = false;
options.inPurgeable = true;
Bitmap preparedBitmap = BitmapFactory.decodeResource(yourAppName.getSharedApplication().getResources(),
            R.drawable.bg, options);
    Drawable background = new BitmapDrawable(preparedBitmap);
    ((LinearLayout) findViewById(R.id.yourLayoutId))
        .setBackgroundDrawable(background);

最后,将xml图片放置在res/drawable文件夹中(如果您有xml图片),将png、jpeg和其他常规图片放置在res/drawable-hdpi文件夹中。希望这能帮到您。

@Ofear 完全没问题,我在等待你的回应。 - ademar111190

2
我尝试了Android部分中找到的所有答案,但都没有成功。如果您能说明一下您尝试过哪些方法会更有帮助,但Marc的评论是正确的。您需要确保您的图像和窗口都具有更高的位深度(可能是ARGB_8888)。有关更多信息,可以查看此文章,并可以启用抖动。将此放入onCreate应该可以解决很多问题:
getWindow().setFormat(PixelFormat.RGBA_8888);

2
好的,我找到了一个解决方案... 据我所知,当在Photoshop中保存渐变图像时,Photoshop将尝试通过删除Alpha通道来优化图像大小。
因此,您需要从顶部(左侧/右侧)或底部(右侧/左侧)删除一个像素
然后Photoshop将“看到”该图像具有Alpha通道,并且它将在设备上工作......要注意...一些设备无法完美显示渐变色。
希望这能有所帮助!感谢大家的帮助!

0

尝试使用高质量图像。您能确认背景是否也包含地球图像和上面的文本吗?背景是否具有渐变颜色?


图片质量高,背景不包含地球和文字,只有灰色。背景具有渐变颜色。 - Ofir Hadad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接