Android 智能屏幕适配工具,便捷有效(改进版,解决很多资源没有用占用空间)
2015-10-16 18:18
411 查看
此工具参考了其他的屏幕适配方法,改进而来的。
主要原理是以一个分辨率为基准,我这边以1280*720为例子,并且我的手机是该分辨率。美工切图也是这个分辨率。
这样切图后,在1280*720效果肯定是符合的。
如果我们把它放到2560*1440分辨率上面他会是怎么样的效果呢?
比如在1280*720 宽度为
720px 刚好是 满宽
那在2560*1440上面, 则是
1440/720 *
720px=1440 结果在此分辨率上依然是 满屏
其实就是以720p 为基准,在不同的分辨率相对比例。
使用方法如下:
C:\screen\res 这里面将会生成 对应的分辨率不同文件
C:\screen\src 这里放2个文件:(我们以1280 720分辨率为基准)
dimens_h.xml //高度的px
dimens_w.xml //宽度的px 这里面就按平时的写进去即可
将文件放好后,运行jar即可,自动生成文件
源码如下,源码很简单,最好大家看下,方便自己也捣鼓捣鼓。
http://download.csdn.net/detail/xufeifandj/9187399
项目下载地址
主要原理是以一个分辨率为基准,我这边以1280*720为例子,并且我的手机是该分辨率。美工切图也是这个分辨率。
这样切图后,在1280*720效果肯定是符合的。
如果我们把它放到2560*1440分辨率上面他会是怎么样的效果呢?
比如在1280*720 宽度为
720px 刚好是 满宽
那在2560*1440上面, 则是
1440/720 *
720px=1440 结果在此分辨率上依然是 满屏
其实就是以720p 为基准,在不同的分辨率相对比例。
使用方法如下:
C:\screen\res 这里面将会生成 对应的分辨率不同文件
C:\screen\src 这里放2个文件:(我们以1280 720分辨率为基准)
dimens_h.xml //高度的px
dimens_w.xml //宽度的px 这里面就按平时的写进去即可
将文件放好后,运行jar即可,自动生成文件
源码如下,源码很简单,最好大家看下,方便自己也捣鼓捣鼓。
package com.example.administrator.customscrollview; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * Created by ferris * 2015年10月16日 18:00:30 * 459821731@qq.com */ public class ScreenMain { private int baseW; private int baseH; private String dirStr = "c:/screen/res"; private String inputSrc="c:/screen/src"; private String inputStrW="c:/screen/src/dimens_w.xml"; private String inputStrH="c:/screen/src/dimens_h.xml"; private final static String WTemplate = "<dimen name=\"{0}\">{1}px</dimen>\n"; private final static String HTemplate = "<dimen name=\"{0}\">{1}px</dimen>\n"; private final static String VALUE_TEMPLATE = "values-{0}x{1}"; private static final String SUPPORT_DIMESION = "480,800;480,854;540,960;600,1024;720,1184;720,1196;720,1280;768,1024;800,1280;1080,1812;1080,1920;1440,2560;"; private List<SizeBeam> currentSizesW,currentSizesH; public ScreenMain(int baseX, int baseY) { this.baseW = baseX; this.baseH = baseY; File dir = new File(dirStr); if (!dir.exists()) { dir.mkdirs(); } File inputSrcf = new File(inputSrc); if (!inputSrcf.exists()) { inputSrcf.mkdirs(); } } public void generate() { if(currentSizesW==null||currentSizesW.size()<=0){ return; } String[] vals = SUPPORT_DIMESION.split(";"); for (String val : vals) { String[] wh = val.split(","); generateXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1])); } } private void generateXmlFile(int w, int h) { StringBuffer sbForWidth = new StringBuffer(); sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); sbForWidth.append("<resources>\n"); float cellw = w * 1.0f / baseW;//把当前的宽度,按720分,每份占用多少 for (int i = 0; i < currentSizesW.size(); i++) { sbForWidth.append(WTemplate.replace("{0}", currentSizesW.get(i).getName()).replace("{1}", change(cellw * currentSizesW.get(i).getSize()) + "")); } sbForWidth.append("</resources>"); StringBuffer sbForHeight = new StringBuffer(); sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); sbForHeight.append("<resources>\n"); float cellh = h *1.0f/ baseH; for (int i = 0; i < currentSizesH.size(); i++) { sbForHeight.append(HTemplate.replace("{0}", currentSizesH.get(i).getName()).replace("{1}", change(cellh * currentSizesH.get(i).getSize()) + "")); } sbForHeight.append("</resources>"); File fileDir = new File(dirStr + File.separator + VALUE_TEMPLATE.replace("{0}", h + "")// .replace("{1}", w + "")); fileDir.mkdir(); File layxFile = new File(fileDir.getAbsolutePath(), "dimens_w.xml"); File layyFile = new File(fileDir.getAbsolutePath(), "dimens_h.xml"); try { PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile)); pw.print(sbForWidth.toString()); pw.close(); pw = new PrintWriter(new FileOutputStream(layyFile)); pw.print(sbForHeight.toString()); pw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } public static float change(float a) { int temp = (int) (a * 100); return temp / 100f; } public void AnalyticalXml() { File dirW = new File(inputStrW); if (!dirW.exists()) { System.out.print("请放入dimens_w.xml"); return; } File dirH = new File(inputStrH); if (!dirH.exists()) { System.out.print("请放入dimens_h.xml"); return; } try { currentSizesW=readXML(dirW); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { currentSizesH=readXML(dirH); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static List<SizeBeam> readXML(File dir) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(dir); NodeList list = document.getElementsByTagName("dimen"); int size = list.getLength(); List<SizeBeam> sizes = new ArrayList<SizeBeam>(); for (int i = 0; i < size; i++) { Element element = (Element) list.item(i); String name = element.getAttribute("name"); String px = element.getFirstChild().getTextContent(); if (px.endsWith(px)) { px = px.substring(0, px.length() - 2); } sizes.add(new SizeBeam(name, Float.parseFloat(px))); } return sizes; } public static void main(String[] args) { int baseW = 720; int baseH = 1280; ScreenMain run= new ScreenMain(baseW, baseH); run.AnalyticalXml(); run.generate(); } }
http://download.csdn.net/detail/xufeifandj/9187399
项目下载地址
相关文章推荐
- android 定制有关电影院的座位或体育馆场馆运动的场地选择的实现
- [Android Pro] Android 6.0 Root
- Android音频播放讲解
- Android Rect和RectF的区别
- Eventbus 详解,Activity和fragment通讯,相互发送接收数据
- Android 启动模式中巧用singleTask
- android流媒体之硬编码【代码篇】
- Android logcat详解
- Android 编译重要参数 LOCAL_MODULE_TAGS
- Android实现Banner界面循环轮播
- 21.Android 时间工具DateUtil
- Adroid记录
- 获取android SDCard存储大小
- Android_03_关于ListView的使用
- Android SeekBar 和 draw9patch 的使用
- SelectableRoundedImageView——Android图片圆角类库
- android横竖屏切换总结-布局改变和数据保存
- iOS和Android去除字符串两边的空格
- android 天气相关API及使用教程
- setSelected(boolean selected) 和selector 的使用