为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在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";

	@Override
	protected 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下的屏幕适配

    1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px

  2. Android Camera多屏幕适配解决预览照片拉伸

    通常,拍照预览页面的照片拉伸主要与下面两个因素有关: 1.     Surfaceview的大小 2.     Camera中的Preview的大小 如下图:     图中preview显示的是手机支 ...

  3. Unity 屏幕适配小脚本

    屏幕适配是可以通过代码实现的,相信给你时间就一定能写出来. 我们公司貌似没有分辨率适配框架通常对应小屏幕的苹果4要额外设置下等等就完了! 屏幕适配框架实现思路:  通过代码获取当前的分辨率 –> ...

  4. Android 多分辨率多屏幕适配

    请参见文章:http://blog.csdn.net/jiangxinyu/article/details/8598046 文章描述非常清晰.

  5. Android屏幕适配笔记

    1.限定符 为了适配不同屏幕大小的android手机或android平板,有时候就需要利用限定符来为不同的屏幕设定不同的布局文件,在一般情况下我们都是在layout文件夹下为某个活动准备一个默认的布局 ...

  6. Android屏幕适配与切图_汇总

    首先和最后,还是先看好官方文档:http://developer.android.com/guide/practices/screens_support.html 对应的翻译blog有牛人做了:And ...

  7. Android开发——自动生成Android屏幕适配的dimens.xml文件

    使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...

  8. android 屏幕适配1 ——dimens.xml的适配

    1.如果是才开始做项目,已经有设计图:720*1280 1).默认values文件夹:1dp=1px values/dimens_x.xml: name: x1~x720   value:1px~72 ...

  9. Android屏幕适配框架-(今日头条终极适配方案)

    在Android开发中,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈 我们之前做屏幕适配一般都会用到一下两种方式: 第一种就是宽高限定符适配,什么是宽高 ...

随机推荐

  1. ignorable tips

    枚举 索引从0开始 sort 默认升序排列  Array.Sort(intSort); //复制数组 Array.Copy(intSort,intNew,3); intsort 源数组 intnew ...

  2. idea+jsp+jstl c标签页面异常

    先在Schema and DTDs配置C.tld文件 最后提示是少包 网上很多方法都说少jstl.jar 折腾了很久 其实还少standard.jar 以前的解决方法(看下面) 把这两个包分别加到项目 ...

  3. Linux(centos7)下安装Docker

    近期公司开始推Docker技术.这个系列的文章都是基于CentOS7系统下进行讲解的. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器 ...

  4. UMAIL安装教程

    UMAIL安装教程 一.UMAIL虚拟机的创建与安装 首先在VM中选择新建虚拟机 选择下一步 选择稍后安装操作系统 选择Linux系统 版本CentOS 7 64位 选择名称与安装位置 选择下一步 选 ...

  5. PHP使用prepare(),insert数据时要注意的一点!!!

    今天看了PHP防SQL注入,使用预处理prepare,但是我insert数据时,总是插不进去,但是select却可以,弄了很久终于知道原来问题在这里,先上代码 <?php header('con ...

  6. 终止Docker容器

    可以使用 docker stop 来终止一个运行中的容器. 此外,当Docker容器中指定的应用终结时,容器也自动终止. 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl ...

  7. C# 定积分求周长&面积原理 代码实现

    前言: 前些日子,因为工作原因,接触到了求解曲线周长,真的是搞了很久,学生时代真的很简单,但是如今的我来说,忘记了....很多人跟我应该一样. 所以来巩固加强一下记忆.一开始的时候,求周长嘛,找公式呗 ...

  8. 阿里云服务器云数据库免费体验(Java Web详细实例)

    一.效果展示 博主部署了两个war包到阿里云服务器上,一个是没有连接数据库的,另外一个是连接了数据库的. (由于阿里云服务器免费使用15天,下面链接约2016年3月9日后无效) (1)无数据库版访问地 ...

  9. python数据挖掘orange

    http://blog.csdn.net/pipisorry/article/details/52845804 orange的安装 linux下的安装 先安装依赖pyqt4[PyQt教程 - pyth ...

  10. Android插件化的思考——仿QQ一键换肤,思考比实现更重要!

    Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...