android位图 - 最佳实践

时间:2011-12-20 16:58:36

标签: android graphics bitmap

开发适用于任何屏幕尺寸的图形应用程序需要一些思考 通常我会创建高分辨率图形和比例以适应屏幕。

我看过建议避免使用“真实像素” 我尝试使用密度和dp但是使用我使用的解决方案似乎更复杂 并且无法找到更好的方法来扩展我的图形,然后使用设备屏幕(真实像素)

我创建了这个类来缩放我的图像(基于真实像素) 这解决了我的大多数问题(仍有一些设备有不同的宽高比) 似乎工作正常。

public class BitmapHelper {
    // Scale and keep aspect ratio 
    static public Bitmap scaleToFitWidth(Bitmap b, int width) {
        float factor = width / (float) b.getWidth();
        return Bitmap.createScaledBitmap(b, width, (int) (b.getHeight() * factor), false);  
    }

    // Scale and keep aspect ratio     
    static public Bitmap scaleToFitHeight(Bitmap b, int height) {
        float factor = height / (float) b.getHeight();
        return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factor), height, false);  
    }

    // Scale and keep aspect ratio 
    static public Bitmap scaleToFill(Bitmap b, int width, int height) {
        float factorH = height / (float) b.getWidth();
        float factorW = width / (float) b.getWidth();
        float factorToUse = (factorH > factorW) ? factorW : factorH;
        return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorToUse), (int) (b.getHeight() * factorToUse), false);  
    }

    // Scale and dont keep aspect ratio 
    static public Bitmap strechToFill(Bitmap b, int width, int height) {
        float factorH = height / (float) b.getHeight();
        float factorW = width / (float) b.getWidth();
        return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorW), (int) (b.getHeight() * factorH), false);  
    }
}

我的问题是:

  1. 为什么建议避免使用“真实像素”?
  2. 将Bitmaps扩展到屏幕的最佳做法是什么(一篇很好的教程 更受欢迎)
  3. 使用我使用的方法或使用此方法时应该注意什么的缺点
  4. 感谢您的建议

    [编辑] 我忘了提到我通常将SurfaceView用于我的应用程序(如果它有任何区别)

1 个答案:

答案 0 :(得分:0)

  1. 永远不要让你的应用像素完美。它不适用于其他决议。您不需要处理图像大小的方式,因为Android在您制作良好的可扩展布局时会为您执行此操作。您应该为所有dpi类型创建一个映像,并使用资源限定符(drawable-ldp文件夹,drawable-mdp文件夹,..等)将它们分隔在您的资源中
  2. 不要像我说的那样自己缩放位图,Android会为你做这个。您可以影响Android扩展位图的方式,请参阅http://developer.android.com/reference/android/widget/ImageView.html#attr_android:scaleType
  3. Android会为您计算合适的尺寸。这样你就不必自己做所有的数学运算来尝试获取屏幕上的所有内容。构建一个在所有类型的设备上运行的优秀应用程序需要努力制作多组drawables和可能的多组布局(横向/纵向,小/大屏幕)等。