- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在玩弄 Android 并尝试移植 Java 应用程序。以下是一些关于我遇到的问题的问题,并希望得到一些指导。
这是一个相当大的问题(而是多个问题)。但是,我并没有盲目地问他们,因为我已经研究了我可以对他们做些什么,并试图将我的理解付诸实践。我已经花时间提出问题,希望他们对我想要实现的目标有一半的了解。
我将提供一半的代表作为赏金,因为我希望得到彻底的答案和帮助,希望这足以吸引一些人提供帮助。
在此先感谢您的时间和帮助! (期待阅读回复)。
TextLayout && 字体 && Graphics2D
有问题的是以下类和方法:
TextLayout
TextLayout.getAdvance()
TextLayout.getAscent()
TextLayout.draw()
Graphics2D.getFontRenderContext()
TextLayout
的等价物是什么在安卓中。我读到有些人制作了
TextView
并使用它,但我不确定这是否会
private Font myStringFont = new Font("Helvetica", Font.BOLD, 12);
private String myString = "My Test String";
private int midX = getWidth() / 2;
private int midY = getHeight() / 2;
Graphics2D g2 = new Graphics2d();
TextLayout layout = new TextLayout(myString, font, g2.getFontRenderContext());
g2.drawString(myString, midX - ((int)layout.getAdvance() /2), midY);
Canvas canvas;
Paint paint;
private String myString = "My Test String";
private float midX = getWidth() / 2;
private float midY = getHeight() / 2;
//Unsure what to do about TextLayout <- this is where I need an alternative
canvas.drawText(myString, midX - /* whatever my alternative to layout.getAdvance() is */ /2), midY);
getAdvance()
做什么.我注意到在
Paint.FontMetrics()
有
Graphics2D g2 = new Graphics2d();
private int midX = getWidth() / 2;
private int midY = getHeight() / 2;
TextLayout layout = new TextLayout(myString, g2.getFont(), g2.getFontRenderContext());
layout.draw(g2, midX, MidY);
TextLayout
的 Android 替代品是什么? ? TextLayout.getAdvance()
? (我可以使用fontMetrics
来实现它吗?)Graphics2D.getFontRenderContext()
相同的 Android 版本? ? font
的方法,
textlayout
, 和
graphics2d
.第一个来源是 Java 方法和
Font.deriveFont(float size)
通过复制当前字体对象并为其应用新样式来创建新字体对象TextLayout.getAdvance()
前进是从原点到行方向最右边(最底部)字符前进的距离Graphics2D.setRenderingHint(RenderingHints, RenderingHints)
Graphics2D.getFontRenderContext()
封装应用程序提示,例如抗锯齿和分数指标 private String myString = "Print this test statement";
private int myStringFontSize = 15;
private Color myStringFontColor = Color.red;
private Font myStringFont = new Font("Helvetica", Font.BOLD, myStringFontSize);
private int midX = getWidth() / 2;
private int midY = getHeight() / 2;
public drawString(Graphics2D g2) {
g2.setFont(myStringFont.deriveFont(determineFontSize(g2, myString)));
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALISING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
TextLayout layout = new TextLayout(myString, g2.getFont(), g2.getFontRenderContext());
g2.setPaint(myStringFontColor);
g2.drawString(myString, midX - ((int) layout.getAdvance() / 2), midY);
}
protected float determinFontSize(Graphics2D g2, String myString) {
int space = getWidth();
float fontSize = 1.0f;
float finalFontSize = fontSize;
while(fontSize < 25) {
Font font myString.deriveFont(fontSize);
Textlayout layout = new TextLayout(waitingMessage, font, g2.getFontRenderContext());
if(layout.getAdvance() > space) {
finalFontSize = fontSize - 2;
break;
}
fontSize++;
}
finalFontSize = fontSize - 4;
return finalFontSize;
}
private String myString = "Print this test statement";
private int myStringFontSize = 15;
private int myStringFontColor = Color.RED; //Android uses int rather than Color
Typeface tf = new Typeface(); //Android uses Typeface rather than Font
private float midX = getWidth() / 2; //Changed to float because drawText requires float
private float midY = getHeight() / 2; //changed to float because drawText requires float
public drawString(Canvas canvas, Paint paint) {
tf.create("Helvetica", BOLD);
paint.setTypeface(tf);
paint.setTextSize((float) myStringFontSize);
paint.setTextSize(determineFontSize(canvas, myString, paint);
paint.setAntiAlias(true);
//NOT SURE WHAT TO DO WITH TextLayout YET
paint.setColor(myStringFontColor);
canvas.drawText(myString, midX - ((int)layout.getAdvance() / 2), midY, paint); //Not sure how to deal with layout.getAdvance() just yet
}
protected float determineFontSize(Canvas canvas, String myString, Paint paint) {
float fontSize = 1.0f;
float finalFontSize = fontSize;
int space = getWidth();
while(fontSize < 25) {
paint.setTextSize(fontSize);
//NOT SURE WHAT TO DO ABOUT TextLayout.getAdvance() YET or g2.getFontRenderContext()
if(layout.getAdvance() > space) {
finalFontSize = fontSize - 2;
break;
}
fontSize++;
}
finalFontSize = fontSize - 4;
return finalFontSize;
}
TextLayout.getAdvance()
我有什么选择? ? (是否因TextLayout的问题已回答,请忽略)Graphics2D.getFontRenderContext()
我有什么选择? ? 最佳答案
TextLayout
, Font
和 Graphics2D
问题可以简单地在 Android 中通过使用 TextView
来解决。 ,布局 xml 文件中的一些布局属性,并可能用一些代码对其进行扩充。举个例子,TextView
可以在布局xml中声明如下:
<TextView android:id="@+id/logo"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:paddingTop="5dip"
android:text="Fancy Logo"
android:textSize="24sp"
android:layout_weight="0.8"
android:textStyle="bold"
android:textColor="@color/black" />
layout_width
尚未设置,因为我们将增加
TextView
使用会影响其占用宽度的字体。
AssetManager assetManager = getContext().getAssets();
Typeface tf = Typeface.createFromAsset(assetManager,"GILB.TTF");
TextView logo = (TextView)findViewById(R.id.logo);
logo.setTypeface(tf);
setTypeface()
方法重载了一个额外的样式参数,该参数也可以提供粗体和/或斜体效果。
RelativeLayout
,
AbsoluteLayout
等 - 有很多资源可以教你如何使用这些资源以达到良好的效果。
Ellipse2D.Double
, 你可以使用
Canvas.drawOval(RectF oval, Paint paint)
RectF
object 指定椭圆的边界框。
wrap_content
,
match_parent
或
fill_parent
而不是特定的“倾角”尺寸。图形应转换为 9-patch 格式,以便它们可以拉伸(stretch)以适应尺寸变化。
关于java - 将 Java 类和方法移植到 Android。 (TextLayout、Font、Graphics2D 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6822316/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!