小编grA*_*uit的帖子

android:为xml元素分配一个常量值

我正在编写一个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)

有解决方案吗?

谢谢

xml android constants android-xml

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

如何在Android上的camera2 API中重用MediaRecorder的Surface?

因此,整个周末我都使用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级别太高,所以我没有对其进行测试。

以下是有关代码段的快速概述:

  1. 设置 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)
  2. 创建所有强大的录音会话

    SurfaceTexture texture = mTextureView.getSurfaceTexture();
    texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
    
    List<Surface> …
    Run Code Online (Sandbox Code Playgroud)

video android mediarecorder android-camera2

6
推荐指数
1
解决办法
2702
查看次数

使用硬编码但不使用统一变量的着色器代码中的for循环

我在这个问题上请求了关于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在两个平台上运行相同的代码.

如果需要更多信息,您可以查看原始问题,但我不想复制并粘贴所有内容.我希望这种保持简短的方法是值得赞赏的,否则我会把所有的东西都复制一遍.

我期待着一个解释:)

谢谢!

android glsl vertex-shader opengl-es-2.0 libgdx

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

Android SQLite快速从光标获取所有数据

我在我的一个应用程序中处理性能问题.也许你们其中一个人可以帮助我?!

我有一个大约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中那样懒惰加载结果的聪明方法,因为我需要同时显示所有结果.

我有什么办法可以大大加快这个过程吗?

任何帮助是极大的赞赏!

最好的祝福

database sqlite performance android cursor

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

在gradle中设置applicationId以获得组合的产品风味

我有两个应用程序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彼此完全不同:(

非常感谢您的帮助!

谢谢,祝一切顺利!

android build gradle android-productflavors

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