gpt4 book ai didi

android - 如何在满足条件时以编程方式更改 ImageButton src 目标?

转载 作者:可可西里 更新时间:2023-11-01 18:49:42 26 4
gpt4 key购买 nike

我有一个学校项目,我正在尝试让手电筒应用程序运行。对于开/关 ImageButton,我想要 4 个自定义图像。

如果手电筒关闭:-turn_on.png(默认)-turn_on_pressing.png(状态按下=真)

如果手电筒打开:-turn_off.png(默认)-turn_off_pressing.png(状态按下=真)

我希望更改 ImageButton src 目标以在“on_selector.xml”和“off_selector.xml”之间切换。最初我能够 setImageResource() 更改默认按钮图像。现在我正试图在新闻图片上添加我自己的图片,我遇到了非常困难的时期。

应用程序.java:

import android.app.Activity;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Bundle;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.view.View;
import android.widget.ImageButton;
import com.jrr.flashlight.R;

public class Application extends Activity {

ImageButton flashControl;
Camera camera;
Parameters params;

private boolean hasFlash;
private boolean isFlashOn = false;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.application_layout);

flashControl = (ImageButton) findViewById(R.id.flashButtonOn);
flashControl.setOnClickListener(flashControlListener());

hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); //sets value for boolean hasFlash

}


private View.OnClickListener flashControlListener() {
return new View.OnClickListener(){
@Override
public void onClick(View v) {
if (!isFlashOn){
findViewById(R.id.appbackground).setBackgroundColor(Color.WHITE);

if(hasFlash){
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
}
isFlashOn = true;
} else {
findViewById(R.id.appbackground).setBackgroundColor(Color.BLACK);

if(hasFlash){
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
}
isFlashOn = false;
}

}
};
}

@Override
protected void onResume() {
super.onResume();
camera = Camera.open();
params = camera.getParameters();

}

@Override
protected void onPause() {
super.onPause();

if(camera!=null) {
camera.release();
camera = null;
}
findViewById(R.id.appbackground).setBackgroundColor(Color.BLACK);
}

application_layout.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/appbackground"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp"
android:layout_margin="0dp"
android:background="#000000">

<ImageButton
android:background="#80000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<!--I want to be able to change the following line-->
android:src="@drawable/on_selector"
android:id="@+id/flashButtonOn" android:layout_gravity="center"/>
</LinearLayout>

on_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/turn_on_pressing" /> <!-- pressed -->
<item android:drawable="@drawable/turn_on" /> <!-- default -->
</selector>

关闭选择器.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/turn_off_pressing" /> <!-- pressed -->
<item android:drawable="@drawable/turn_off" /> <!-- default -->
</selector>

我想做的事情是否可行,或者是否有其他方法可以实现?我已经坚持了大约 3 个小时,无法在任何地方在线找到答案(也许没有问正确的问题?)所以感谢任何帮助!

谢谢!

最佳答案

是不是要求必须是imageResource?您可以尝试改用 backgroundResource。

ImageButton flashButtonOn = (ImageButton) findViewById(R.id.flashButtonOn);
flashButtonOn.setBackgroundResource(R.drawable.on_selector);

或者试试

flashButtonOn.setImageResource(R.drawable.replacementGraphic);

关于android - 如何在满足条件时以编程方式更改 ImageButton src 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17129589/

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