移动端视觉SLAM学习笔记 (五) 参数设置

2023-05-16

考虑到后续的各项参数,这里先把配置文件和参数设置界面做好,后面增加的参数就都可以添加进来了。

Android本身参数设置的框架,包括配置文件和设置界面,也就是PreferenceFragmentCompat。本来以前用的是PreferenceFragment,结果写代码的时候发现已经被androidx里的PreferenceFragmentCompat替换了,然后学习了下,用法差不多。

如上图,可以添加配置文件功能,会自动添加三个文件(根据你的命名):SettingsActivity.java、settings_activity.xml、root_preferences.xml。

        其中,root_preferences.xml就是所谓的配置文件,参数设置可以放在这里:

<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">

    <PreferenceCategory app:title="相机参数设置">

        <EditTextPreference
            app:defaultValue="1.0"
            app:key="camera_focus"
            app:title="相机焦距"
            app:useSimpleSummaryProvider="true" />

        <ListPreference
            app:defaultValue="1"
            app:key="ImageSize"
            app:entries="@array/image_sizes"
            app:entryValues="@array/image_sizesvalue"
            app:title="图像分辨率"
            app:useSimpleSummaryProvider="true" />
    </PreferenceCategory>

</PreferenceScreen>

SettingsActivity.java文件中会SettingsFragment类会加载root_preferences.xml,其主类SettingsActivity继承AppCopatActivity可供程序作为Activity进行调用。

settings_activity.xml界面文件会调用SettingsFragment类:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/settings"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

由此,三部分组成了参数配置的基本功能,使用还是比较简单的,效果图如下:

为了动态获取手机相机支持的分辨率,在程序启动后读取相机分辨率列表,然后存到文件里,代码如下:

 public static class SettingsFragment extends PreferenceFragmentCompat {
        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            setPreferencesFromResource(R.xml.root_preferences, rootKey);

            //图像分辨率列表,从相机设备读取参数存过来
            ListPreference listPreferenceCategory = (ListPreference) findPreference("ImageSize");
            if (listPreferenceCategory != null && mImageSizes.length > 0) {
                CharSequence entries[] = new String[mImageSizes.length];
                CharSequence entryValues[] = new String[mImageSizes.length];
                int i = 0;
                for (Size size : mImageSizes) {
                    entries[i] = size.toString();
                    entryValues[i] = Integer.toString(i);
                    i++;
                }
                listPreferenceCategory.setEntries(entries);
                listPreferenceCategory.setEntryValues(entryValues);
            }
        }
    }

 使用参数值的时候也比较简单,如下:

SharedPreferences preferences= PreferenceManager.getDefaultSharedPreferences(getContext());
String sCameraFocus = preferences.getString("camera_focus", "1.0");

干到这突然进行不下去了,如果修改分辨率需要重启相机,可是重启相机的过程出了很多问题,Surface释放、Camera释放,查了查网上Camera2相关的资源,找到的只有这个链接做到了修改分辨率:https://gitee.com/hugang2021/Camera/tree/master,但是对我来说改动有点大,不想改,不过查找的时候发现现在又出了个CameraX,据说使用简单方便,果断准备尝鲜(●ˇ∀ˇ●)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动端视觉SLAM学习笔记 (五) 参数设置 的相关文章

随机推荐