此工具参考了其他的屏幕适配方法,改进而来的。
主要原理是以一个分辨率为基准,我这边以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