为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在xml中写dip(这个还是可以的),前面两种感觉过程工作量太大了,由加载大图片的优化思想

同样对一个小算法来实现此功能。。

喜欢多媒体播放器的朋友,可以去看我的一个还未成熟的播放器,里面用到了屏幕适配,下载地址:http://www.eoemarket.com/soft/370334.html,正在完善中

先来测试代码:

package cn.marsXTU.Screenadapter;import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;public class MainActivity extends Activity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getDisplayMetrics(MainActivity.this);}public static String getDisplayMetrics(Context cx) {String str = "";DisplayMetrics dm = new DisplayMetrics();// 取得DisplayMetrics对象方法一// dm = cx.getApplicationContext().getResources().getDisplayMetrics();// 取得DisplayMetrics对象方法二((Activity) cx).getWindowManager().getDefaultDisplay().getMetrics(dm);int screenWidth = dm.widthPixels;int screenHeight = dm.heightPixels;float density = dm.density;float xdpi = dm.xdpi;float ydpi = dm.ydpi;str += "The absolute width:" + String.valueOf(screenWidth) + "pixels\n";Log.i(TAG,str);str += "The absolute heightin:" + String.valueOf(screenHeight) + "pixels\n";Log.i(TAG,str);str += "The logical density of the display.:" + String.valueOf(density) + "\n";Log.i(TAG,str);str += "X dimension :" + String.valueOf(xdpi) + "pixels per inch\n";Log.i(TAG,str);str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inch\n";Log.i(TAG,str);return str;}}

打印信息如下:

09-14 20:01:43.327: I/MainActivity(1384): The absolute width:480pixels
09-14 20:01:43.327: I/MainActivity(1384): The absolute width:480pixels
09-14 20:01:43.327: I/MainActivity(1384): The absolute heightin:800pixels
09-14 20:01:43.339: I/MainActivity(1384): The absolute width:480pixels
09-14 20:01:43.339: I/MainActivity(1384): The absolute heightin:800pixels
09-14 20:01:43.339: I/MainActivity(1384): The logical density of the display.:1.5
09-14 20:01:43.339: I/MainActivity(1384): The absolute width:480pixels
09-14 20:01:43.339: I/MainActivity(1384): The absolute heightin:800pixels
09-14 20:01:43.339: I/MainActivity(1384): The logical density of the display.:1.5
09-14 20:01:43.339: I/MainActivity(1384): X dimension :240.0pixels per inch
09-14 20:01:43.343: I/MainActivity(1384): The absolute width:480pixels
09-14 20:01:43.343: I/MainActivity(1384): The absolute heightin:800pixels
09-14 20:01:43.343: I/MainActivity(1384): The logical density of the display.:1.5
09-14 20:01:43.343: I/MainActivity(1384): X dimension :240.0pixels per inch
09-14 20:01:43.343: I/MainActivity(1384): Y dimension :240.0pixels per inch
09-14 20:01:43.539: D/libEGL(1384): loaded /system/lib/egl/libEGL_emulation.so
09-14 20:01:43.551: D/(1384): HostConnection::get() New Host Connection established 0xb7d17680, tid 1384
09-14 20:01:43.571: D/libEGL(1384): loaded /system/lib/egl/libGLESv1_CM_emulation.so
09-14 20:01:43.571: D/libEGL(1384): loaded /system/lib/egl/libGLESv2_emulation.so
09-14 20:01:43.707: W/EGL_emulation(1384): eglSurfaceAttrib not implemented
09-14 20:01:43.751: D/OpenGLRenderer(1384): Enabling debug mode 0
09-14 20:01:43.859: D/OpenGLRenderer(1384): TextureCache::get: create texture(0xb7cd38e0): name, size, mSize = 1, 1048576, 1048576
09-14 20:01:43.991: D/OpenGLRenderer(1384): TextureCache::get: create texture(0xb7cead10): name, size, mSize = 2, 5184, 1053760
09-14 20:01:44.119: D/OpenGLRenderer(1384): TextureCache::get: create texture(0xb7d0fa70): name, size, mSize = 4, 20736, 1074496
09-14 20:01:44.159: D/OpenGLRenderer(1384): TextureCache::get: create texture(0xb7cce840): name, size, mSize = 6, 2304, 1076800
09-14 20:06:09.639: D/OpenGLRenderer(1384): TextureCache::flush: target size: 646080
09-14 20:06:09.639: D/OpenGLRenderer(1384): TextureCache::callback: name, removed size, mSize = 1, 1048576, 28224

情景

将1280*720的apk适配到800*480的设备上

//首先在程序启动的适合,获取屏幕的真实分辨率,然后计算对应的缩放比例
DisplayMetrics dm = new DisplayMetrics();
dm = getApplicationContext().getResources().getDisplayMetrics();
Constant.SCREEN_WIDTH = dm.widthPixels;
Constant.SCREEN_HEIGHT = dm.heightPixels;
if (Constant.SCREEN_WIDTH > Constant.SCREEN_HEIGHT) {
Constant.SCREEN_HEIGHT = dm.widthPixels;
Constant.SCREEN_WIDTH = dm.heightPixels;
}
Constant.xScale = (float) Constant.SCREEN_WIDTH / Constant.CAMERA_WIDTH;
Constant.yScale = (float) Constant.SCREEN_HEIGHT/ Constant.CAMERA_HEIGHT;

下面对图片进行缩放:

/**
得到缩放后的bitmap
*/
protected Bitmap scaleBitmap(Bitmap bitmap) {
Bitmap newBitmap = null;
if (Constant.xScale != 1 || Constant.yScale != 1) {
bitmapWidth = (int) (bitmap.getWidth() * Constant.xScale);
bitmapHeight = (int) (bitmap.getHeight() * Constant.yScale);
newBitmap = Bitmap.createScaledBitmap(bitmap, (int) (bitmapWidth), (int) (bitmapHeight), true);
bitmap.recycle();
return newBitmap;
}
return bitmap;
}

android下在屏幕适配小总结相关推荐

  1. 兮°Android下的屏幕适配问题的一点心得

    来csdn也有好久了,以前也只是看博客逛论坛从不发言论,俗称:僵尸用户吧.然后心里默默的欣赏着,哇塞,都是大牛,其实自己也有积累一些心得,但是又觉得类似的资源在网上一抓一大把,写得不好的话也没人来看, ...

  2. Android高手笔记-屏幕适配 UI优化

    Android高手笔记-屏幕适配 & UI优化 屏幕与适配 由于Android碎片化严重,屏幕分辨率千奇百怪,而想要在各种分辨率的设备上显示基本一致的效果,适配成本越来越高: 屏幕适配究其根本 ...

  3. android 修改 dpi_Android屏幕适配重点盘点

    引子 屏幕适配是 android 开发/面试 绕不开的一个问题.本文 将屏幕适配的 知识要点完整展现给各位读者. 正文大纲 android需要做屏幕适配的原因 基础知识点(很重要) 屏幕适配攻略 正文 ...

  4. 《转》Android 今日头条屏幕适配方案终极版正式发布!

    概述 Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解. 刚好,近期准备对糗事百科Android客 ...

  5. Android笔记之屏幕适配全攻略

    Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什么Android需要进行屏幕适配. 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对A ...

  6. Android性能优化—屏幕适配方案

    为什么要做适配?Android碎片化 Android系统碎片化:基于Google原生系统,小米定制的MIUI.魅族定制的flyme.华为定制的EMUI等等: Android机型屏幕尺寸碎片化:5寸.5 ...

  7. Android权威官方屏幕适配全攻略

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  8. android应用的屏幕适配,移动APP测试:Android屏幕适配问题一

    原标题:移动APP测试:Android屏幕适配问题一 Android中适配问题,是最常见和最难解决的事情,下面笔者就带着大家来说一下适配的相关操作. Android可以为当前的屏幕配置通过适当的方式管 ...

  9. 【Android】之屏幕适配

    前言 Android 系统能发展到今天,离不开其开源性,但是随着越来越多的设备接入 Android 系统,并对 Android 系统进行各种各样的定制,导致长期以来出现了各种碎片化严重的问题.例如,A ...

  10. Android也谈android和多屏幕适配

    android界面的布局十分简单,简单到不懂编程的人,也能借用android的布局面板快速设计出需要的用户界面.android的界面布局又十分复杂,既使是工任经验十分丰富的老鸟,也不敢保证他的布局在所 ...

最新文章

  1. Gin源码解析和例子——路由
  2. 百度地图轨迹开发,如何绘制带有箭头的折线
  3. 5-spark学习笔记-spark集群应用与监控
  4. phpstorm的php函数文档插件
  5. 黑马程序员-10 IO流2 File,properties,合并流,对象持久化,管道流,RandomAccessFile...
  6. SAP Hybris recipe 为 cx 的安装和初始化
  7. matlab里box office,免费试用Econometrics Toolbox
  8. linux普通用户命令权限,Linux普通用户没有权限使用命令怎么办
  9. Serverless 实战 —— 函数计算 + Typescript 实践
  10. 电商BANNER灵感背景欣赏|平面设计中的极简风格
  11. Python Django chartit 多报表显示
  12. 3. LAMP 安装与配置
  13. C# TextBox光标操作 光标定位 光标移动到最后
  14. linux版本的多屏协同,一招搞定手机和电脑的多屏协同
  15. 软件工程学习笔记(二)软件项目管理
  16. Excel NORMINV函数用法
  17. cm60消费机说明书_中控CM50、CM60消费机二次开发SDK
  18. python中if not x: 和 if x is not None: 和 if not x is None的使用和区别(这里面有一个坑)
  19. C语言近似值求pi,C语言-计算π的近似值
  20. NAND flash 文件系统制作

热门文章

  1. Linux下防止rm -frv 删除错误的解决办法
  2. Fiddler—PC上实现手机的抓包
  3. Twitter数据抓取的方法(三)
  4. Twitter数据抓取的方法(二)
  5. Java添加事件监听的四种方法代码实例
  6. 深度学习实现缺陷检测算法汇总
  7. 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示,,,
  8. 软件测试2019:第八次作业—— 缺陷管理(含缺陷管理工具的配置实验)
  9. Java JDK动态代理Proxy类的原理是什么? - 知乎(重排版)
  10. oralce数据库创建同义词