zoukankan      html  css  js  c++  java
  • 原生camera应用 保存设置界面参数方法

    ------------设置参数--------

    camera.java 中声明变量

    private ComboPreferences mPreferences;

    private PreferenceGroup mPreferenceGroup;

      mPreferences 是ComboPreferences(继承SharedPreferences)对象,用于存储 用户点击设置界面保存的数据

      mPreferenceGroup是界面列表抽象对象CameraPreference的集合,用于存储camera设置界面的信息

    该数据储存在camera_preferences.xml中,初始化mPreferenceGroup

    mPreferenceGroup = settings.getPreferenceGroup(R.xml.camera_preferences);

    用户点击设置界面做的操作

    例如:照片尺寸切换设置等

    InLineSettingKnob.java

    OnTouchListener mNextTouchListener = new OnTouchListener() {//切换下一个尺寸

      public boolean onTouch(View v, MotionEvent event) {

      ...

      if (!mNext && changeIndex(mIndex - 1)){

      ...

      }

    }

     changeIndex方法执行的操作

    protected boolean changeIndex(int index) {

     ...

     mPreference.setValueIndex(mIndex);

       if (mListener != null) {

        mListener.onSettingChanged();

     }

     updateView();

        ... 

    }

    执行ListPreference的persistStringValue方法保存相应的picturesize等信息到ComboPreferences

    同时更新执行mListener.onSettingChanged() 将预览参数传递给底层,更新预览效果

    执行updateView() 更新设置界面

     ------------设置列表界面读取参数--------

    例如:其他设置 界面

    OtherSettingsPopup.java 内部类OtherSettingsAdapter先生设置条目列表

    private class OtherSettingsAdapter extends ArrayAdapter<ListPreference> {

      ...

      public View getView(int position, View convertView, ViewGroup parent){

        ...

        view.initialize(pref); // 将对应的ListPreference传递给InLineSettingItem

        ...

      }

      ...

    }

    调用InLineSettingItem.java 的initialize

    public void initialize(ListPreference preference) {

      setTitle(preference);

      if (preference == null) return;

      mPreference = preference;

      reloadPreference();

    }

    public void reloadPreference() {

      mIndex = mPreference.findIndexOfValue(mPreference.getValue());

      updateView();

     }

    调用ListPreference.java的getValue()方法

    public String getValue() {

      if (!mLoaded) {

        mValue = getSharedPreferences().getString(mKey,findSupportedDefaultValue());

        mLoaded = true;

      }

      return mValue;

    }

    注意:这里的getValue的值是从上面保存的ComboPreferences 获取的,

    因此 如果设置过的一些属性 设置界面数据从mPreferences读取,

    否则就从mPreferenceGroup(即camera_preferences.xml)读取。

  • 相关阅读:
    商户网站使用第三方支付的大致原理和实现
    ASP.NET MVC中检测浏览器版本并提示下载更新
    如何选择使用IEnumerable, ICollection, IList
    IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树
    IEnumerable是集合,IEnumerator是集合的迭代器
    ASP.NET MVC中使用Session来保持表单的状态
    在ASP.NET MVC中实现Select多选
    总结ASP.NET MVC视图页使用jQuery传递异步数据的几种方式
    在ASP.NET MVC4中使用Quartz.NET执行定时任务
    委托, 泛型委托,Func<T>和Action<T>
  • 原文地址:https://www.cnblogs.com/adamli/p/3225031.html
Copyright © 2011-2022 走看看