骁龙相机,移除美颜,换成闪光灯

本篇博客介绍了一位开发者如何通过修改相机应用程序的布局文件和源代码,将顶部菜单中的美颜按钮替换为闪光灯按钮的过程。此改动涉及资源文件调整及多个Java类的修改,包括对按钮可见性和交互行为的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顶部的菜单有个美颜的按钮,8.0不好用,也不知道底层驱动的事还是底层驱动的事,然后我就将它改成了闪光灯,附件是patch仅供参考

Change-Id: I66428035daeb26a292c1158183e782fe4d7a3577
---
 .../res/layout/camera_controls.xml                 |  4 +-
 .../src/com/android/camera/LocationManager.java    |  4 +-
 .../src/com/android/camera/PhotoMenu.java          | 47 +++++++++++++++++++++-
 .../src/com/android/camera/ui/CameraControls.java  | 29 ++++++++++++-
 4 files changed, 78 insertions(+), 6 deletions(-)

diff --git a/packages/apps/SnapdragonCamera/res/layout/camera_controls.xml b/packages/apps/SnapdragonCamera/res/layout/camera_controls.xml
index 9d6ebf0..17c25c4 100644
--- a/packages/apps/SnapdragonCamera/res/layout/camera_controls.xml
+++ b/packages/apps/SnapdragonCamera/res/layout/camera_controls.xml
@@ -106,7 +106,9 @@
     <com.android.camera.ui.RotateImageView
         android:id="@+id/ts_makeup_switcher"
         style="@style/ToggleButton" />
-
+    <com.android.camera.ui.RotateImageView
+        android:id="@+id/flash_switcher"
+        style="@style/ToggleButton" />
     <LinearLayout
         android:id="@+id/remaining_photos"
         android:layout_width="wrap_content"
diff --git a/packages/apps/SnapdragonCamera/src/com/android/camera/LocationManager.java b/packages/apps/SnapdragonCamera/src/com/android/camera/LocationManager.java
index ffeafce..85f4757 100644
--- a/packages/apps/SnapdragonCamera/src/com/android/camera/LocationManager.java
+++ b/packages/apps/SnapdragonCamera/src/com/android/camera/LocationManager.java
@@ -110,7 +110,9 @@ public class LocationManager {
         boolean isEnabled = mLocationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)||
             mLocationManager.isProviderEnabled(android.location.LocationManager.NETWORK_PROVIDER);
         if (!isEnabled) {
-            mListener.onShowHint(1);
+            //mListener.onShowHint(1);
+            mListener.onHideHint();
+            Toast.makeText(mContext,mLocatingErrorString,Toast.LENGTH_LONG).show();
         } else {
             mListener.onShowHint(2);
         }
diff --git a/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoMenu.java b/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoMenu.java
index f51719d..c45b22a 100755
--- a/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoMenu.java
+++ b/packages/apps/SnapdragonCamera/src/com/android/camera/PhotoMenu.java
@@ -101,6 +101,7 @@ public class PhotoMenu extends MenuController
     private View mCameraSwitcher;
     private View mSettingMenu;
     private View mPreviewThumbnail;
+    private View mFlashSwitcher;// add flash button
     private PhotoUI mUI;
     private int mPopupStatus;
     private int mPreviewMenuStatus;
@@ -128,6 +129,7 @@ public class PhotoMenu extends MenuController
         mFrontBackSwitcher = ui.getRootView().findViewById(R.id.front_back_switcher);
         mHdrSwitcher = ui.getRootView().findViewById(R.id.hdr_switcher);
         mTsMakeupSwitcher = ui.getRootView().findViewById(R.id.ts_makeup_switcher);
+        mFlashSwitcher = ui.getRootView().findViewById(R.id.flash_switcher);// add flash button
         mSceneModeSwitcher = ui.getRootView().findViewById(R.id.scene_mode_switcher);
         mFilterModeSwitcher = ui.getRootView().findViewById(R.id.filter_mode_switcher);
         mMakeupListener = makeupListener;
@@ -158,6 +160,9 @@ public class PhotoMenu extends MenuController
         }
 
         initSceneModeButton(mSceneModeSwitcher);
+
+        initFlashButton(mFlashSwitcher);// add flash button
+
         initFilterModeButton(mFilterModeSwitcher);
         if(TsMakeupManager.HAS_TS_MAKEUP) {
             initMakeupModeButton(mTsMakeupSwitcher);
@@ -178,7 +183,7 @@ public class PhotoMenu extends MenuController
 
         mOtherKeys1 = new String[] {
                 CameraSettings.KEY_SELFIE_FLASH,
-                CameraSettings.KEY_FLASH_MODE,
+                //CameraSettings.KEY_FLASH_MODE,
                 CameraSettings.KEY_RECORD_LOCATION,
                 CameraSettings.KEY_PICTURE_SIZE,
                 CameraSettings.KEY_JPEG_QUALITY,
@@ -881,7 +886,7 @@ public class PhotoMenu extends MenuController
         ImageView iv = (ImageView) mTsMakeupSwitcher;
         iv.setImageResource(resid);
 
-        button.setVisibility(View.VISIBLE);
+        //button.setVisibility(View.VISIBLE);
 
         String makeupOn = pref.getValue();
         Log.d(TAG, "PhotoMenu.initMakeupModeButton():current init makeupOn is " + makeupOn);
@@ -975,6 +980,44 @@ public class PhotoMenu extends MenuController
         });
     }
 
+    // add flash button
+    public void initFlashButton(View button) {
+        button.setVisibility(View.INVISIBLE);
+        final IconListPreference pref = (IconListPreference) mPreferenceGroup
+                .findPreference(CameraSettings.KEY_FLASH_MODE);
+        if (pref == null)
+            return;
+        changeFlashModeControlIcon(pref.getValue());
+        button.setVisibility(View.VISIBLE);
+        button.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String value = pref.getValue();
+                if(!value.equals("")) {
+                    if(value.equals("auto")) {
+                        value = "off";
+                    } else if(value.equals("on")) {
+                        value = "auto";
+                    } else {
+                        value = "on";
+                    }
+                }
+                pref.setValue(value);
+                changeFlashModeControlIcon(value);
+            }
+        });
+    }
+    // add flash button
+    private void changeFlashModeControlIcon(String value) {
+        if(!value.equals("")) {
+            final IconListPreference pref = (IconListPreference) mPreferenceGroup
+                    .findPreference(CameraSettings.KEY_FLASH_MODE);
+            int index = pref.getCurrentIndex();
+            ImageView iv = (ImageView) mFlashSwitcher;
+            iv.setImageResource(((IconListPreference) pref).getLargeIconIds()[index]);
+        }
+    }
+
     public void addModeBack() {
         if (mSceneStatus == MODE_SCENE) {
             addSceneMode();
diff --git a/packages/apps/SnapdragonCamera/src/com/android/camera/ui/CameraControls.java b/packages/apps/SnapdragonCamera/src/com/android/camera/ui/CameraControls.java
index cded2b3..d470d2f 100755
--- a/packages/apps/SnapdragonCamera/src/com/android/camera/ui/CameraControls.java
+++ b/packages/apps/SnapdragonCamera/src/com/android/camera/ui/CameraControls.java
@@ -60,6 +60,7 @@ public class CameraControls extends RotatableLayout {
     private View mTsMakeupSwitcher;
     private View mIndicators;
     private View mPreview;
+    private View mFlashSwitcher;
     private View mSceneModeSwitcher;
     private View mFilterModeSwitcher;
     private View mReviewDoneButton;
@@ -78,6 +79,7 @@ public class CameraControls extends RotatableLayout {
     private static final int SCENE_MODE_INDEX = 2;
     private static final int FILTER_MODE_INDEX = 3;
     private static final int MENU_INDEX = 4;
+    private static final int FLASH_MODE_INDEX = 1;
     private static final int SWITCHER_INDEX = 5;
     private static final int SHUTTER_INDEX = 6;
     private static final int PREVIEW_INDEX = 7;
@@ -125,6 +127,7 @@ public class CameraControls extends RotatableLayout {
             }
             mSceneModeSwitcher.setVisibility(View.INVISIBLE);
             mFilterModeSwitcher.setVisibility(View.INVISIBLE);
+            mFlashSwitcher.setVisibility(View.INVISIBLE);
 
             mSwitcher.setVisibility(View.INVISIBLE);
             mShutter.setVisibility(View.INVISIBLE);
@@ -154,6 +157,7 @@ public class CameraControls extends RotatableLayout {
             mShutter.setVisibility(View.INVISIBLE);
             mVideoShutter.setVisibility(View.INVISIBLE);
             mMenu.setVisibility(View.INVISIBLE);
+            mFlashSwitcher.setVisibility(View.INVISIBLE);
             mMute.setVisibility(View.INVISIBLE);
             mIndicators.setVisibility(View.INVISIBLE);
             mPreview.setVisibility(View.INVISIBLE);
@@ -214,6 +218,7 @@ public class CameraControls extends RotatableLayout {
             mVideoShutter.setPressed(false);
             mSwitcher.setPressed(false);
             mMenu.setPressed(false);
+            mFlashSwitcher.setPressed(false);
             mMute.setPressed(false);
             mFrontBackSwitcher.setPressed(false);
             if(TsMakeupManager.HAS_TS_MAKEUP) {
@@ -224,11 +229,11 @@ public class CameraControls extends RotatableLayout {
             mSceneModeSwitcher.setPressed(false);
         }
 
-
         ((ShutterButton) mShutter).enableTouch(enable);
         mVideoShutter.setClickable(enable);
         ((ModuleSwitcher) mSwitcher).enableTouch(enable);
         mMenu.setEnabled(enable);
+        mFlashSwitcher.setPressed(enable);
         mMute.setEnabled(enable);
         mFrontBackSwitcher.setEnabled(enable);
         if(TsMakeupManager.HAS_TS_MAKEUP) {
@@ -262,6 +267,8 @@ public class CameraControls extends RotatableLayout {
             mViewList.add(mVideoShutter);
         if (mMenu.getVisibility() == View.VISIBLE)
             mViewList.add(mMenu);
+        if (mFlashSwitcher.getVisibility() == View.VISIBLE)
+            mViewList.add(mFlashSwitcher);
         if (mMute.getVisibility() == View.VISIBLE)
             mViewList.add(mMute);
         if (mIndicators.getVisibility() == View.VISIBLE)
@@ -290,6 +297,7 @@ public class CameraControls extends RotatableLayout {
             mHdrSwitcher = findViewById(R.id.hdr_switcher);
         }
         mMenu = findViewById(R.id.menu);
+        mFlashSwitcher =  findViewById(R.id.flash_switcher);
         mMute = findViewById(R.id.mute_button);
         mIndicators = findViewById(R.id.on_screen_indicators);
         mPreview = findViewById(R.id.preview_thumb);
@@ -371,6 +379,7 @@ public class CameraControls extends RotatableLayout {
         toIndex(mVideoShutter, w, h, rotation, 3, 6, VIDEO_SHUTTER_INDEX);
         toIndex(mMenu, w, h, rotation, 4, 0, MENU_INDEX);
         toIndex(mMute, w, h, rotation, 3, 0, MUTE_INDEX);
+        toIndex(mFlashSwitcher, w, h, rotation, 3, 0, FLASH_MODE_INDEX);
         toIndex(mIndicators, w, h, rotation, 0, 6, INDICATOR_INDEX);
         toIndex(mFrontBackSwitcher, w, h, rotation, 2, 0, FRONT_BACK_INDEX);
         toIndex(mPreview, w, h, rotation, 0, 6, PREVIEW_INDEX);
@@ -480,6 +489,7 @@ public class CameraControls extends RotatableLayout {
         mSceneModeSwitcher.setX(mLocX[idx1][SCENE_MODE_INDEX] + x);
         mFilterModeSwitcher.setX(mLocX[idx1][FILTER_MODE_INDEX] + x);
         mMenu.setX(mLocX[idx1][MENU_INDEX] + x);
+        mFlashSwitcher.setX(mLocX[idx1][FLASH_MODE_INDEX] + x);
         mMute.setX(mLocX[idx1][MUTE_INDEX] + x);
         mSwitcher.setX(mLocX[idx1][SWITCHER_INDEX] - x);
         mShutter.setX(mLocX[idx1][SHUTTER_INDEX] - x);
@@ -496,6 +506,7 @@ public class CameraControls extends RotatableLayout {
         mSceneModeSwitcher.setY(mLocY[idx1][SCENE_MODE_INDEX] + y);
         mFilterModeSwitcher.setY(mLocY[idx1][FILTER_MODE_INDEX] + y);
         mMenu.setY(mLocY[idx1][MENU_INDEX] + y);
+        mFlashSwitcher.setY(mLocY[idx1][FLASH_MODE_INDEX] + y);
         mMute.setY(mLocY[idx1][MUTE_INDEX] + y);
         mSwitcher.setY(mLocY[idx1][SWITCHER_INDEX] - y);
         mShutter.setY(mLocY[idx1][SHUTTER_INDEX] - y);
@@ -507,6 +518,7 @@ public class CameraControls extends RotatableLayout {
     public void setTitleBarVisibility(int status){
         mFrontBackSwitcher.setVisibility(status);
         mMenu.setVisibility(status);
+        mFlashSwitcher.setVisibility(status);
         mSceneModeSwitcher.setVisibility(status);
         mFilterModeSwitcher.setVisibility(status);
         if(TsMakeupManager.HAS_TS_MAKEUP) {
@@ -533,6 +545,7 @@ public class CameraControls extends RotatableLayout {
         mShutter.animate().cancel();
         mVideoShutter.animate().cancel();
         mMenu.animate().cancel();
+        mFlashSwitcher.animate().cancel();
         mMute.animate().cancel();
         mIndicators.animate().cancel();
         mPreview.animate().cancel();
@@ -552,6 +565,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
@@ -570,6 +584,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
@@ -588,6 +603,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
@@ -606,6 +622,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
@@ -636,6 +653,7 @@ public class CameraControls extends RotatableLayout {
         mVideoShutter.animate().cancel();
         mMenu.animate().cancel();
         mMute.animate().cancel();
+        mFlashSwitcher.animate().cancel();
         mIndicators.animate().cancel();
         mPreview.animate().cancel();
         if (mViewList != null)
@@ -648,6 +666,7 @@ public class CameraControls extends RotatableLayout {
             shutterAnim.stop();
 
         mMenu.setVisibility(View.VISIBLE);
+        mFlashSwitcher.setVisibility(View.VISIBLE);
         mIndicators.setVisibility(View.VISIBLE);
         mPreview.setVisibility(View.VISIBLE);
 
@@ -666,6 +685,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
@@ -686,6 +706,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
@@ -706,6 +727,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
@@ -726,6 +748,7 @@ public class CameraControls extends RotatableLayout {
                 mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
                 mMute.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+                mFlashSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
 
                 mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
                 mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
@@ -1000,7 +1023,7 @@ public class CameraControls extends RotatableLayout {
         View[] views = {
             mSceneModeSwitcher, mFilterModeSwitcher, mFrontBackSwitcher,
             TsMakeupManager.HAS_TS_MAKEUP ? mTsMakeupSwitcher : mHdrSwitcher,
-            mMenu, mShutter, mPreview, mSwitcher, mMute, mReviewRetakeButton,
+            mMenu, mFlashSwitcher,mShutter, mPreview, mSwitcher, mMute, mReviewRetakeButton,
             mReviewCancelButton, mReviewDoneButton
         };
         for (View v : views) {
@@ -1022,6 +1045,7 @@ public class CameraControls extends RotatableLayout {
         mSceneModeSwitcher.setVisibility(View.INVISIBLE);
         mFilterModeSwitcher.setVisibility(View.INVISIBLE);
         mMenu.setVisibility(View.INVISIBLE);
+        mFlashSwitcher.setVisibility(View.INVISIBLE);
     }
 
     public void showCameraSettings() {
@@ -1034,6 +1058,7 @@ public class CameraControls extends RotatableLayout {
         mSceneModeSwitcher.setVisibility(View.VISIBLE);
         mFilterModeSwitcher.setVisibility(View.VISIBLE);
         mMenu.setVisibility(View.VISIBLE);
+        mFlashSwitcher.setVisibility(View.VISIBLE);
     }
 
     public void hideRemainingPhotoCnt() {
--
1.9.1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值