
考虑到后续的各项参数,这里先把配置文件和参数设置界面做好,后面增加的参数就都可以添加进来了。
Android本身参数设置的框架,包括配置文件和设置界面,也就是PreferenceFragmentCompat。本来以前用的是PreferenceFragment,结果写代码的时候发现已经被androidx里的PreferenceFragmentCompat替换了,然后学习了下,用法差不多。
如上图,可以添加配置文件功能,会自动添加三个文件(根据你的命名):SettingsActivity.java、settings_activity.xml、root_preferences.xml。
其中,root_preferences.xml就是所谓的配置文件,参数设置可以放在这里:
SettingsActivity.java文件中会SettingsFragment类会加载root_preferences.xml,其主类SettingsActivity继承AppCopatActivity可供程序作为Activity进行调用。
settings_activity.xml界面文件会调用SettingsFragment类:
由此,三部分组成了参数配置的基本功能,使用还是比较简单的,效果图如下:
为了动态获取手机相机支持的分辨率,在程序启动后读取相机分辨率列表,然后存到文件里,代码如下:
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,据说使用简单方便,果断准备尝鲜(●ˇ∀ˇ●)。