小编Jav*_*ave的帖子

使用FloatMath或Math和演员?

在最新的Android API更新中,FloatMath标有以下lint-warning:

在旧版本的Android中,出于性能原因,在浮点数上运行时,建议使用android.util.FloatMath.然而,在现代硬件上,双精度与浮动速度一样快(尽管它们需要更多内存),而在Android的最新版本中,由于JIT优化java.lang.Math的方式,FloatMath实际上比使用java.lang.Math慢. .因此,如果您仅定位Froyo及更高版本,则应使用Math而不是FloatMath.

这里还提到double和float在最近的硬件上速度相等.

我在我正在使用的应用程序中使用一些三角数学(目标是Froyo及以上),但是不需要高精度,所以我一直在使用浮点数,FloatMath到目前为止,没有必要切换到双打.
但是,如果float是期望的结果,则"使用Math结束FloatMath" - 推荐不会说明使用哪一个.

所以,简而言之; 哪一个更好?

float foo = FloatMath.sin(bar);
Run Code Online (Sandbox Code Playgroud)

要么

float foo = (float) Math.sin(bar);
Run Code Online (Sandbox Code Playgroud)

另外,我只有一个Froyo设备,所以我不能自己做任何适当的基准测试.

从API级别22开始,不推荐使用FloatMath类来支持常规Math类.

java floating-point double android android-lint

36
推荐指数
2
解决办法
3万
查看次数

丢弃对OpenGL中的程序性能有害吗?

我正在读这篇文章,作者写道:

以下是通过两个简单步骤在每个平台上编写高性能应用程序的方法:
[...]
遵循最佳实践.在Android和OpenGL的情况下,这包括"批量绘制调用","不在片段着色器中使用丢弃"等内容.

我从来没有听说丢弃会对性能等产生不良影响,并且一直在使用它来避免在没有必要时使用详细的alpha时进行混合.

有人可以解释为什么以及何时使用丢弃可能被认为是一种不好的做法,以及discard + depthtest与alpha + blend相比如何?

编辑:在收到关于这个问题的答案后,我做了一些测试,通过渲染背景渐变,顶部有纹理四边形.

  • 使用GL_DEPTH_TEST和以" if( gl_FragColor.a < 0.5 ){ discard; }" 行结尾的片段着色器给出了大约32 fps.
  • 从片段着色器中删除if/discard语句会将渲染速度提高到大约44 fps.
  • 使用GL_BLEND和混合函数"(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)"而不是GL_DEPTH_TEST也导致大约44 fps.

shader android opengl-es opengl-es-2.0

22
推荐指数
2
解决办法
2万
查看次数

Android活动二进制XML文件行:您必须提供layout_width属性

我已经读过它,但它仍然在这里.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".TaskEditActivity" >
Run Code Online (Sandbox Code Playgroud)

所以,例外 java.lang.RuntimeException: Binary XML file line #34: You must supply a layout_width attribute.

属性在那里,架构也是......解决方案?

android android-layout

21
推荐指数
3
解决办法
3万
查看次数

Android ColorFilter - Porter-Duff模式

我正在尝试解决android的问题ColorFilters.文档很差,所以主要方法是尝试不同的变体.

问题:

有一个位图.一些像素具有alpha = 255,其他像素具有alpha = 0.我正在尝试绘制一个具有特定颜色的圆圈.我想在位图中不改变alpha通道,但在绘图时我想将颜色乘以位图-α.

因此,在绘制圆形时,我希望不绘制alpha = 0的像素,但是alpha = 255的像素要涂上我想要的颜色.Alpha通道不应该改变.

我正在尝试使用porter-duff ColorFilter(android sdk中的PorterDuffColorFilter类).

官方网站上有太多的模式和不可理解的描述:http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

我想我应该使用DST_ATOPSRC_ATOP,但它们不像我描述的那样工作.

此外,srcColor在porter-duff colorfilter的构造函数中有一个奇怪的参数.

我无法理解"Sa"和"Sc"在公式中的含义[Da, Sc * Da + (1 - Sa) * Dc].它可以来自传递给colorfilter构造函数的颜色,也可以通过"paint.setColor"进行颜色设置.

谁知道,它是如何工作的?

android colors filter colorfilter porter-duff

14
推荐指数
2
解决办法
2万
查看次数

当对象旋转时,法线旋转方向错误

我在WebGL中渲染一个简单的环面.旋转顶点工作正常,但我的法线有问题.当围绕单个轴旋转时,它们保持正确的方向,但是当围绕第二个轴的旋转增加时,法线开始以错误的方式向上旋转,直到其中一个旋转为180°,然后法线在完全相反的情况下旋转他们应该.我假设问题在于用于旋转的四元数,但我无法确定哪里出错了.

这是一个(略有修改,但它仍然显示问题)我的项目的jsfiddle:https://jsfiddle.net/dt509x8h/1/
在小提琴的html部分有一个包含来自obj的所有数据的div -file我正在阅读以生成圆环(尽管分辨率较低).

顶点着色器:

attribute vec4 aVertexPosition;
attribute vec3 aNormalDirection;

uniform mat4 uMVPMatrix;
uniform mat3 uNMatrix;

varying vec3 nrm;

void main(void) {
    gl_Position = uMVPMatrix * aVertexPosition;
    nrm = aNormalDirection * uNMatrix;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

varying vec3 nrm;

void main(void) {
    gl_FragColor = vec4(nrm, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

更新矩阵(在输入时运行):

mat4.perspective(pMatrix, Math.PI*0.25, width/height, clipNear, clipFar); //This is actually not run on input, it is just here to show the creation of the perspective matrix
mat4.fromRotationTranslation(mvMatrix, rotation, position);
mat3.normalFromMat4(nMatrix, mvMatrix);

mat4.multiply(mvpMatrix, pMatrix, …
Run Code Online (Sandbox Code Playgroud)

3d matrix quaternions webgl gl-matrix

14
推荐指数
1
解决办法
910
查看次数

File.list()为目录返回null

执行代码时

File path = new File("/data");
boolean isDir = path.isDirectory();
//isDir is true
String[] fList = path.list();
//fList == null!
Run Code Online (Sandbox Code Playgroud)

在Android 2.3模拟器上,文件列表为空.这似乎与文档http://developer.android.com/reference/java/io/File.html#list()中的声明相矛盾:

Returns null if this file is not a directory.
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

java file-io android

5
推荐指数
1
解决办法
4363
查看次数

Java Comparable返回值,它必须是1,-1还是0?

这可能是一个微不足道的问题,但我还没有找到任何关于它的内容,所以这里说:
当实现Comparable接口时,我们应该定义方法compareTo(),以便根据文档提供以下内容:

  • 对于所有x和y,sgn(x.compareTo(y))== -sgn(y.compareTo(x)).

  • 该关系是传递的:(x.compareTo(y)> 0 && y.compareTo(z)> 0)意味着x.compareTo(z)> 0.

  • 对于所有z,x.compareTo(y)== 0表示sgn(x.compareTo(z))== sgn(y.compareTo(z)).

现在,令人困惑的部分是返回值,具体如下:

返回负整数,零或正整数,因为此对象小于,等于或大于指定对象.

似乎大多数实现都返回1,-1或者0,即使没有提到返回值以这种方式受限的要求.
因此,以下代码适用于对Collections.sort()包含类实例的列表(使用)进行排序Foo:

public int compareTo(Foo other){
    return this.value > other.value? 1 : this.value < other.value ? -1 : 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不是:

public int compareTo(Foo other){
    return (int)(this.value - other.value);
}
Run Code Online (Sandbox Code Playgroud)

哪里valuelong,和值之间的差值不超过Integer.MAX_VALUE.

我失去了一些东西在这里,或者是完全需要的返回值1,-1或者0,矛盾的文件?

更新:感谢您的所有答案,但似乎人为因素归咎于此.我提到计算的差异小于Integer.MAX_VALUE,这应该意味着没有溢出,但我的计算是错误的,所以我确实得到了溢出,这导致了奇怪的结果.

java comparable

3
推荐指数
1
解决办法
1843
查看次数

使用Android客户端进行socketIO时出现SocketIO异常

我正在构建一个Android聊天应用程序.我在服务器端使用nodejs并尝试为socketIO实现android客户端.我到了SocketIO exception.这些代码有什么问题?

服务器

var http = require('http'),fs = require('fs');

var app = http.createServer(function (req, res) {

res.end();
                                                      }).listen(8000, '127.0.0.1');

var io = require('socket.io').listen(app);

io.sockets.on('connection', function(socket) {
socket.on('echo', function(data) {
socket.emit('echoback', data);
});
});
Run Code Online (Sandbox Code Playgroud)

客户

package com.jack.pri;
import java.net.MalformedURLException;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
import io.socket.*;

public class MainActivity extends Activity {
//private SocketIO socket;
private TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) { …
Run Code Online (Sandbox Code Playgroud)

android chat node.js

3
推荐指数
1
解决办法
1763
查看次数

BigDecimal.valueOf缓存机制

我听说这个BigDecimal.valueOf()方法比调用好,new BigDecimal()因为它缓存了常见的值.我想知道缓存机制是如何valueOf工作的.

java caching bigdecimal

3
推荐指数
1
解决办法
930
查看次数

如何使 EditText 椭圆化?

我尝试在 EditText 失去焦点时省略 EditText,但它不起作用。
以下是我的xml:

 <EditText
        android:id="@+id/editText1"
        android:layout_width="100dp"
        android:singleLine="true"
        android:ellipsize="end"
        android:gravity="left"
        android:text="11111sdsssssskdkdjdjdjddhhdhdhhdh"
        android:textSize="8pt"
        android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?

android android-edittext

2
推荐指数
1
解决办法
5132
查看次数