gpt4 book ai didi

java - 打开/关闭/自动闪光模式

转载 作者:行者123 更新时间:2023-11-29 05:00:09 25 4
gpt4 key购买 nike

我正在尝试在三种方法之间切换,以在我的相机应用程序中打开/关闭和自动控制闪光灯。我会像在谷歌相机应用程序中那样只使用一个按钮进行切换。第一次点击然后关闭,第二次将打开它,第三次将其设置为自动。我创建了按钮,并使用此方法更改图标:

private void updateFlashOnScreenIndicator(String value) {
ImageButton switchFlash = (ImageButton) findViewById(R.id.flash_on_off);
if (switchFlash == null) {
return;
}
if (value == null || Parameters.FLASH_MODE_OFF.equals(value)) {
switchFlash.setImageResource(R.drawable.ic_flash_off_white_24dp);
} else {
if (Parameters.FLASH_MODE_AUTO.equals(value)) {
switchFlash.setImageResource(R.drawable.ic_flash_auto_white_24dp);
} else if (Parameters.FLASH_MODE_ON.equals(value)) {
switchFlash.setImageResource(R.drawable.ic_flash_on_white_24dp);
} else {
switchFlash.setImageResource(R.drawable.ic_flash_off_white_24dp);
}
}
}

它基本上可以工作...事实上,如果我尝试创建一个方法(在我的按钮的 onClick 中调用),只需编写:

public void flashToggle(View view) {
updateFlashOnScreenIndicator("on");
}

它改变了图标并设置了闪光灯。但是当然它并没有真正设置闪光灯!如何在点击时在这三种模式之间切换?

编辑:我在我的按钮中找到了这个类和 onClick 现在我可以在状态之间切换并且图标正确更改......但是闪光灯仍然没有任何反应..它没有改变..它总是关闭

public class FlashButton extends ImageButton {
private Camera.Parameters mParameters;
private Camera camera;
public enum FlashEnum {
AUTOMATIC, ON, OFF
}

public interface FlashListener {
void onAutomatic();
void onOn();
void onOff();
}

private FlashEnum mState;
private FlashListener mFlashListener;

public FlashButton(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
int next = ((mState.ordinal() + 1) % FlashEnum.values().length);
setState(FlashEnum.values()[next]);
performFlashClick();
}
});
//Sets initial state
setState(FlashEnum.AUTOMATIC);
}

private void performFlashClick() {
Camera.Parameters parameters = CameraController1.getParameters();
if(mFlashListener == null)return;
switch (mState) {
case AUTOMATIC:
mFlashListener.onAutomatic();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
Log.d("Falsh", "Auto");
break;
case ON:
mFlashListener.onOn();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
Log.d("Falsh", "On");
break;
case OFF:
mFlashListener.onOff();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
Log.d("Falsh", "Off");
break;
}
}

private void createDrawableState() {

switch (mState) {
case AUTOMATIC:
setImageResource(R.drawable.ic_flash_auto_white_24dp);
break;
case ON:
setImageResource(R.drawable.ic_flash_on_white_24dp);
break;
case OFF:
setImageResource(R.drawable.ic_flash_off_white_24dp);
break;
}
}


public FlashEnum getState() {
return mState;
}

public void setState(FlashEnum state) {
if(state == null)return;
this.mState = state;
createDrawableState();

}

public FlashListener getFlashListener() {
return mFlashListener;
}

public void setFlashListener(FlashListener flashListener) {
this.mFlashListener = flashListener;
}

}

现在的按钮是:

<net.cc.mycameraapp.FlashButton
android:id="@+id/flash_on_off"
android:background="@null"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitCenter"
android:layout_marginTop="4dp"
android:src="@drawable/ic_flash_off_white_24dp"
android:padding="14dp"
android:layout_centerHorizontal="true">
</net.cc.mycameraapp.FlashButton>

最佳答案

让它成为全局性的

Camera.Parameters parameters;
Icon flash;

flash = (Icon) findViewById(R.id.flash);

制作一个单独的本地参数,并在每次单击 flash 时设置它。我分别为 FLASH AUTO、FLASH ON 和 FLASH OFF 维护了文本 c i 和 N。

flash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flash.getText().equals("c")) {
flash.setText("N");
Camera.Parameters mParameters;
mParameters = mCamera.getParameters();
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
mCamera.setParameters(mParameters);
} else
if (flash.getText().equals("N")) {
flash.setText("i");
Camera.Parameters mParameters;
mParameters = mCamera.getParameters();
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
mCamera.setParameters(mParameters);
} else if (flash.getText().equals("i")) {
flash.setText("c");
Camera.Parameters mParameters;
mParameters = mCamera.getParameters();
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
mCamera.setParameters(mParameters);
}
}
});

在surfacecreated里面把它放在下面

 @Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
try {
mCamera = Camera.open();
parameters = mCamera.getParameters();
if (flash.getText().equals("c")) {
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
} else if (flash.getText().equals("N")) {
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
} else if (flash.getText().equals("i")) {
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
}

mCamera.setParameters(parameters);
setCameraDisplayOrientation(this, Camera.CameraInfo.CAMERA_FACING_BACK, mCamera);
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
} catch (RuntimeException e) {
System.err.println("camera0 :" + e);
return;
} catch (IOException e) {
e.printStackTrace();
}
}

关于java - 打开/关闭/自动闪光模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com