【问题标题】:android: (bad)low image quality in layout backgroundandroid:(坏)布局背景中的低图像质量
【发布时间】:2012-04-05 05:46:31
【问题描述】:

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

我该怎么办? 我尝试使用 72dpi 和 300 dpi 制作图像,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"));
        }
    });


}

}

【问题讨论】:

  • DPI 与它无关。那是马赫条纹,这表明背景以太低的位深度显示(例如,在 8 位模式下显示 32 位渐变)。

标签: android image layout


【解决方案1】:

我尝试了在 Android 部分找到的所有答案,但没有成功

如果您说明您也尝试过哪些方法会很有帮助,但 Marc 的评论是正确的。您需要确保您的图像和窗口都具有较高的位深度(可能是 ARGB_8888)。有关更多信息,请参阅this article,您可以启用抖动。把它放在onCreate 中应该会处理很多事情:

getWindow().setFormat(PixelFormat.RGBA_8888);

【讨论】:

    【解决方案2】:

    尝试使用高质量图像。您能否确认背景是否也包含地球图像和文字?背景是否有渐变色?

    【讨论】:

    • 图片质量高,背景不包含地球和文字,只有灰色。背景有渐变色..
    【解决方案3】:

    好的,伙计们,我找到了解决方案... 据我了解...在 Photoshop 中保存渐变图像时,Photoshop 将尝试通过删除 Alpha 通道来优化图像大小。

    所以你需要从上(左/右)角或下(右/左)角删除一个像素

    然后 Photoshop 将“看到”图像具有 Alpha 通道,并且它将在设备上工作... 请注意...某些设备无法完美显示渐变色...

    希望对您有所帮助! 感谢大家的帮助!

    【讨论】:

      【解决方案4】:

      试试看:

      把它放在你的第一个活动的 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 Perfecty,我正在等待您的回复。
      猜你喜欢
      • 2016-02-09
      • 2012-01-15
      • 2011-06-15
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2011-05-03
      • 2019-06-07
      相关资源
      最近更新 更多