android下在屏幕适配小总结
为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在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下在屏幕适配小总结的更多相关文章
- Android下的屏幕适配
1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px
- Android Camera多屏幕适配解决预览照片拉伸
通常,拍照预览页面的照片拉伸主要与下面两个因素有关: 1. Surfaceview的大小 2. Camera中的Preview的大小 如下图: 图中preview显示的是手机支 ...
- Unity 屏幕适配小脚本
屏幕适配是可以通过代码实现的,相信给你时间就一定能写出来. 我们公司貌似没有分辨率适配框架通常对应小屏幕的苹果4要额外设置下等等就完了! 屏幕适配框架实现思路: 通过代码获取当前的分辨率 –> ...
- Android 多分辨率多屏幕适配
请参见文章:http://blog.csdn.net/jiangxinyu/article/details/8598046 文章描述非常清晰.
- Android屏幕适配笔记
1.限定符 为了适配不同屏幕大小的android手机或android平板,有时候就需要利用限定符来为不同的屏幕设定不同的布局文件,在一般情况下我们都是在layout文件夹下为某个活动准备一个默认的布局 ...
- Android屏幕适配与切图_汇总
首先和最后,还是先看好官方文档:http://developer.android.com/guide/practices/screens_support.html 对应的翻译blog有牛人做了:And ...
- Android开发——自动生成Android屏幕适配的dimens.xml文件
使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...
- android 屏幕适配1 ——dimens.xml的适配
1.如果是才开始做项目,已经有设计图:720*1280 1).默认values文件夹:1dp=1px values/dimens_x.xml: name: x1~x720 value:1px~72 ...
- Android屏幕适配框架-(今日头条终极适配方案)
在Android开发中,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈 我们之前做屏幕适配一般都会用到一下两种方式: 第一种就是宽高限定符适配,什么是宽高 ...
随机推荐
- PowerBI 第九篇:修改查询
在PowerBI的查询编辑器中,用户可以使用M语言修改Query,或修改Query字段的类型,或向Query中添加数据列(Column),对Query进行修改会导致PowerBI相应地更新数据模型(D ...
- 从JVM角度看i++ 与++i
1.i++和++i的问题 反编译结果为 Code: 0: iconst_1 1: istore_1 2: iinc 1, 1 //这个个指令,把局部变量1,也就是i,增加1,这 ...
- json转化为对象数组
1.ascx传值给aspx aspx页面 <%@ Page Title="" Language="C#" MasterPageFile="~/_ ...
- 如何找回Oracle所有用户丢失的密码
如何找回Oracle所有用户丢失的密码: 方法一:1.以操作系统验证的方式登录 SQL>conn / as sysdba; 2.查看系统中的用户名. SQL>select USERNAME ...
- Java IO流笔记
File 类 ps:注意file的delete失败可能是输入输出流还在用这个file Java实现简单文件管理 package fileDemo; import java.io.File; impor ...
- 自写JQ控件-树状菜单控件[demo下载]
一个多月没有写博客了,最近也弄一个基于JQ的树状菜单控件,在此分享给大家.另外呢,通过这个例子分享一下怎么写JQ控件的. 事实上工作中,也是经常遇到的,有些时候自己想实现一些前端效果,用网上一些插件吧 ...
- KVO and Swift
不像Objective-c中的类,Swift类对于KVO并没有原生的支持,不过你可以在类型安全的前提下使用属性观察者轻松的完成相同的目标. 不管如何,从NSObject类派生出的类是支持KVO的,如果 ...
- paypal的IPN机制
paypal对接时发现有这么一个机制,看起来还不错,起到了防止篡改欺诈行为,保证了通信的安全性,但会增加几次通信.
- cocos2dx 3.2之Lua打飞机项目
1 创建lua打飞机项目 cocos new T32Lua -dE:\Installed\cocos2d-x-3.2\cocos2d-x-3.2\projects -l lua 2 ...
- 2 TileMapObject的使用
1 CCTMXObjectGroup的使用方法 为了取以下内容: 操作代码如下: T27TileMapObject.h #ifndef __T27TileMapObject_H__ #define _ ...