考虑到后续的各项参数,这里先把配置文件和参数设置界面做好,后面增加的参数就都可以添加进来了。
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(使用前将#替换为@)