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

来源:http://www.cnblogs.com/xx-wqj/archive/2016/10/23/5988073.html
-Advertisement-
Play Games

(四)實現設備硬體交互與媒體交互 4.6自定義攝像頭覆蓋層 1.將Camera中的內容實時的繪製到SurfaceView中 若要自定義拍攝界面,只要重新定義surface的界面即可 以下展示全部代碼 2.改變拍攝方向,調用setDisplayOrientation(90)後,拍攝方向方向才會垂直顯示 ...


(四)實現設備硬體交互與媒體交互

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);

        }
    }

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.紅點切換間距 2.顯示和隱藏按鈕 3.getViewTreeObserver() http://www.cnblogs.com/wangying222/p/5267923.html ...
  • 1.app功能:通過註冊登錄賬戶,擁有一個賬戶本,能夠將平時自己容易的忘記的賬戶記錄下來,並可以保持到雲端,不需要擔心數據丟失,只要登錄賬戶,便可獲取到自己的賬戶本。 2.實現的效果圖,如下: 以下界面分別為註冊界面、登錄界面、提交賬戶內容界面、賬戶列表界面、長按刪除賬戶信息、具體賬戶內容信息 3. ...
  • ListView詳解 以學生信息管理系統為例,詳細介紹Listview的使用、優化 ...
  • webView.loadUrl("http://10.0.2.2:8080/assets/RealNetJSCallJavaActivity.htm"); js調用的Java文件中寫 點擊視頻可以選擇任意播放器 ...
  • 對於HTTPS我在網上找了一堆資料看了下, 各種協議和證書已經有點暈了 最後我現有的感覺是, 在HTTP伺服器上放一個證書, 在原本的HTTP訪問之前客戶端先檢查證書是否正確 如果客戶端證書檢查正確, 說明對 這個伺服器就是我要連接的那個server 不對, 就說明這個server是個假冒的 同樣也 ...
  •  ...
  • (六)與系統交互 6.1後臺通知 1.關於後臺通知,下麵展示6種樣式。值得一提的是,筆者的小米5只能顯示基本樣式,雷軍真是良心廠商啊。 2.首先上佈局xml 3.接著是完整代碼 6.3定時執行周期任務 1.AlarmManager用來管理和執行任務,可以在程式沒有運行的時候執行。並且有多種啟動和計算 ...
  • 清理單個應用緩存 通過反射調用方法 需要許可權:android.permission.DELETE_CACHE_FILES. 以上許可權為系統許可權,手機衛士應用為用戶應用,不能拿到此許可權 換思路: 調用系統清除緩存的界面,讓用戶在系統清除緩存界面實現清除邏輯 查找系統清除緩存的界面方法: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...