Android5.0開發範例大全 讀書筆記(五)

來源:互聯網
上載者:User

標籤:checkbox   etc   title   方向   oca   des   action   catch   led   

(四)實現裝置硬體互動與媒體互動

4.6自訂網路攝影機覆蓋層

1.將Camera中的內容即時的繪製到SurfaceView中

  若要自訂拍攝介面,只要重新定義surface的介面即可

  以下展示全部代碼

public class PreviewActivity extends AppCompatActivity implements SurfaceHolder.Callback {    Camera mCamera;    SurfaceView mPreview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_preview);        mPreview= (SurfaceView) findViewById(R.id.preview);        assert mPreview != null;        mPreview.getHolder().addCallback(this);        mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);        mCamera=Camera.open();    }    @Override    protected void onPause() {        super.onPause();        mCamera.stopPreview();    }    @Override    protected void onDestroy() {        super.onDestroy();        mCamera.release();    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        try {            mCamera.setPreviewDisplay(mPreview.getHolder());        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {        Camera.Parameters params=mCamera.getParameters();        List<Camera.Size> sizes=params.getSupportedPreviewSizes();        Camera.Size selected=sizes.get(0);        params.setPreviewSize(selected.width,selected.height);        mCamera.setParameters(params);        mCamera.setDisplayOrientation(90);        mCamera.startPreview();    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {    }}

2.改變拍攝方向,調用setDisplayOrientation(90)後,拍攝方向方向才會垂直顯示

mCamera.setDisplayOrientation(90);

4.12建立傾斜監聽器

1.擷取系統的SensorManager服務

mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);

2.擷取加速度感知器

mAccelerometer=mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

3.主方法中的監聽,即時改變顏色

    public void onSensorChanged(SensorEvent event) {        float[] values = event.values;        float x = values[0] / 10;        float y = values[1] / 10;        int scaleFactor;        if (x > 0) {            scaleFactor = (int) Math.min(x * 255, 255);            mRight.setBackgroundColor(Color.TRANSPARENT);            mLeft.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0));        } else {            scaleFactor = (int) Math.min(Math.abs(x) * 255, 255);            mRight.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0));            mLeft.setBackgroundColor(Color.TRANSPARENT);        }        if (y > 0) {            scaleFactor = (int) Math.min(y * 255, 255);            mTop.setBackgroundColor(Color.TRANSPARENT);            mBottom.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0));        } else {            scaleFactor = (int) Math.min(Math.abs(y) * 255, 255);            mTop.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0));            mBottom.setBackgroundColor(Color.TRANSPARENT);        }        valueView.setText(String.format("X:%1$1.2f,Y:%2$1.2f,Z:%3$1.2f", values[0], values[1], values[2]));

4.分別在resume和pause中註冊和登出

 @Override    protected void onResume() {        super.onResume();        mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);    }
 @Override    protected void onPause() {        super.onPause();        mSensorManager.unregisterListener(this);    }

5.感應器這塊水很深,真要學的話我發現一本書叫《Android感應器進階編程》,哪天想不開了就去看看吧。

(五)資料持久化

5.1製作喜好設定介面

1.以前這種使用者資訊或者系統配置的介面都是自己用組件慢慢實現,原來還有個叫PreferenceActivity的東西

2.首先,樣式還是通過XML定義,在res下建立目錄xml

  以下是res/xml/settings.xml的完整代碼

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">    <EditTextPreference        android:defaultValue="Joshua"        android:key="namePref"        android:summary="Tell us your name"        android:title="Name" />    <CheckBoxPreference        android:defaultValue="false"        android:key="morePref"        android:title="Enable More Settings" />    <PreferenceScreen        android:dependency="morePref"        android:key="moreScreen"        android:title="More Settings">        <ListPreference            android:defaultValue="GRN"            android:entries="@array/color_names"            android:entryValues="@array/color_values"            android:key="colorPref"            android:summary="Choose your favorite color"            android:title="Favorite Color" />        <PreferenceCategory android:title="LOCATION SETTINGS">            <CheckBoxPreference                android:defaultValue="true"                android:key="gpsPref"                android:summary="use gps to find you"                android:title="Use GPS Location" />            <CheckBoxPreference                android:defaultValue="true"                android:key="networkPref"                android:summary="use NetWork to find you"                android:title="Use NetWork Location" />        </PreferenceCategory>    </PreferenceScreen></PreferenceScreen>

3.接著,讓當前activity繼承PreferenceActivity

public class SettingsActivity extends AppCompatActivity

4.最後,將xml資源與當前activity綁定

addPreferencesFromResource(R.xml.color_setting);

5.此外,還可以載入預設的喜好設定內容,與SharedPreferences結合起來十分完美

PreferenceManager.setDefaultValues(SettingsActivity.this, R.xml.color_setting, false);
@Override    protected void onResume() {        super.onResume();        SharedPreferences settings=PreferenceManager.getDefaultSharedPreferences(this);        String name=settings.getString("namePref","");        boolean isMoreEnabled=settings.getBoolean("morePref",false);    }

6.不過,PreferenceActivity已經完成了其曆史使命,現在Google推薦使用PreferenceFragment

  很簡單,直接上源碼

 @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_settings);        PreferenceManager.setDefaultValues(SettingsActivity.this, R.xml.settings, false);        getFragmentManager().beginTransaction().replace(R.id.preference, new PrefsFragment()).commit();    }    public static class PrefsFragment extends PreferenceFragment {        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            addPreferencesFromResource(R.xml.settings);        }    }

Android5.0開發範例大全 讀書筆記(五)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.