我正在编写一个Android应用程序.我坚持使用xml-layout.是否可以使用类中定义的变量(常量)为xml-tag赋值?
我有一个名为Constants.java的类用于我的所有程序常量.我这样做是为了更好的可维护性.现在我想使用其中一个常量,例如下面定义的VAL作为ui-widged的值.
public class Constants {
public static final int VAL = 10;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,小部件是一个进度条(水平样式),我想定义"android:max"值.通常可以写:
android:max="10"
android:max="@Integer/val
Run Code Online (Sandbox Code Playgroud)
但我想使用我的Constants类中定义的值,如:
android:max="Constants.VAL"
Run Code Online (Sandbox Code Playgroud)
有解决方案吗?
谢谢
因此,整个周末我都使用camera2 API玩了。现在,我开始了解事物如何连接在一起。在测试api来实现视频录制应用程序时,我碰壁了。
我首先根据需要更改了Android Camera2Video示例。让我感到困扰的是,在每次录制过程之后,都将重新创建摄像机会话。更糟糕的是,当开始录制会话时,发生的情况是预览会话将首先被破坏并创建录制会话。录制会话完成后,它将被销毁并创建一个新的预览会话。
该文档明确指出:
创建会话是一项昂贵的操作,可能需要几百毫秒的时间... CameraCaptureSession文档
当我点击“录制”并停止时,结果看起来非常丑陋,并且屏幕结巴。我想改善这种行为,所以我摆弄了代码。
现在要做的是创建我的一个,并且仅CameraSession在其中添加我的预览图面(a TextureView)以及MediaRecorder通过调用其getSurface方法从已经创建的图面中添加该图面。这对于第一个视频效果很好,但是当我尝试捕获第二个视频时,我得到了一个IllegalArgumentException: Bad argument passed to camera service。我想,这是因为表面MediaRecorder是我传递给CameraSession在它的创作以某种方式破坏或改变时,我重置MediaRecorder准备一个新的记录。
我现在的问题是,有什么办法可以解决这个问题?(setInputSurface(Surface surface))可能是,但api级别太高,所以我没有对其进行测试。
以下是有关代码段的快速概述:
设置 MediaRecorder
private void setUpMediaRecorder() throws IOException {
if (mMediaRecorder == null) {
mMediaRecorder = new MediaRecorder();
}
mMediaRecorder.setVideoEncodingBitRate(5000000);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoFrameRate(24);
mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setOrientationHint(SENSOR_ORIENTATION_DEFAULT_DEGREES);
mNextVideoAbsolutePath = getVideoFilePath();
mMediaRecorder.setOutputFile(mNextVideoAbsolutePath);
mMediaRecorder.prepare();
}
Run Code Online (Sandbox Code Playgroud)创建所有强大的录音会话
SurfaceTexture texture = mTextureView.getSurfaceTexture();
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
List<Surface> …Run Code Online (Sandbox Code Playgroud)我在这个问题上请求了关于OpenGL ES 2.0问题的帮助.似乎答案对我来说很奇怪.因此,我决定提出这个问题,希望能够理解正在发生的事情.
这是一个有缺陷的顶点着色器代码:
// a bunch of uniforms and stuff...
uniform int u_lights_active;
void main()
{
// some code...
for ( int i = 0; i < u_lights_active; ++i )
{
// do some stuff using u_lights_active
}
// some other code...
}
Run Code Online (Sandbox Code Playgroud)
我知道这看起来很奇怪,但这实际上是解释问题/错误行为所需的所有代码.
我的问题是:当我为u_lights_active传递一个大于0的值时,为什么循环没有被执行?当我硬编码一些整数,例如4,而不是使用统一的u_lights_active,它工作得很好.
还有一件事,这只出现在Android上,但不出现在桌面上.我使用LibGDX在两个平台上运行相同的代码.
如果需要更多信息,您可以查看原始问题,但我不想复制并粘贴所有内容.我希望这种保持简短的方法是值得赞赏的,否则我会把所有的东西都复制一遍.
我期待着一个解释:)
谢谢!
我在我的一个应用程序中处理性能问题.也许你们其中一个人可以帮助我?!
我有一个大约10k条目的数据库.我使用SQLiteDatabase -class中的默认查询方法查询元素.查询本身足够快.
查询完成后,我必须在Google地图上显示结果.为此,我从光标生成一个结果数组,用于保存标记信息.
我使用的方法看起来像这样:
final ArrayList< MarkerElement > result = new ArrayList< MarkerElement >();
cursor.moveToFirst();
while ( !cursor.isAfterLast() ) {
result.add( new MarkerElement(
cursor.getString( COL_TITLE ),
cursor.getString( COL_SNIPPET ),
new LatLng(
cursor.getDouble( COL_LAT ),
cursor.getDouble( COL_LNG ) ),
cursor.getString( COL_OTHER_USEFUL_DATA ) );
cursor.moveToNext();
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
其中MarkerElement只是包含所需的值在谷歌地图标记的类.
现在的问题是,循环遍历所有游标元素需要很长时间.另外,我想不出像在ListView中那样懒惰加载结果的聪明方法,因为我需要同时显示所有结果.
我有什么办法可以大大加快这个过程吗?
任何帮助是极大的赞赏!
最好的祝福
我有两个应用程序productFlavors:
flavorDimensions "type", "country"
productFlavors {
free {
dimension "type"
}
premium {
dimension "type"
}
us {
dimension "country"
}
de {
dimension "country"
}
}
Run Code Online (Sandbox Code Playgroud)
这导致四个buildVariants(忽略构建类型)。
现在,我面临的挑战是applicationId为这四个变体设置不同的,但是我不知道该怎么做。我发现真正更改的唯一方法applicationId是在productFlavors定义内,如下所示:
productFlavors {
free {
applicationId "some.application.id"
dimension "type"
}
Run Code Online (Sandbox Code Playgroud)
但问题是,flavor实际上是freeDe,并且我想applicationId为合并后的那个设置。
我试过了:
productFlavors {
freeDe {
applicationId "some.random.id"
}
Run Code Online (Sandbox Code Playgroud)
和
productFlavors {
free {
de {
applicationId "some.random.id"
}
}
Run Code Online (Sandbox Code Playgroud)
和许多其他组合,但似乎都不起作用。
重要提示:我不能为此使用前置/后缀,因为应用程序ID彼此完全不同:(
非常感谢您的帮助!
谢谢,祝一切顺利!