【问题标题】:Make Strobe Light from LED light on button click在按钮单击时通过 LED 灯制作频闪灯
【发布时间】:2012-11-02 12:09:41
【问题描述】:

我已经制作了一个手电筒应用程序,我想尝试制作插件以允许频闪灯功能。

我想在不同的按钮上设置它,而不是同一个。我想我需要使用计时器,但我从未使用过计时器,因为我是 java 新手。

这是我的手电筒代码:

public class FlashLightActivity extends Activity {


private boolean isLighOn = false;
private Camera camera;
private Button button;

@Override
protected void onStop() {
    super.onStop();
    if (camera != null) {
        camera.release();
    }
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    button = (Button) findViewById(R.id.buttonFlashlight);
    Context context = this;
    PackageManager pm = context.getPackageManager();

    if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
        Log.e("err", "Device has no camera!");
        return;
    }

    camera = Camera.open();
    final Parameters p = camera.getParameters();

    button.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {

            if (isLighOn) {
                Log.i("info", "torch is turn off!");
                p.setFlashMode(Parameters.FLASH_MODE_OFF);
                camera.setParameters(p);
                camera.stopPreview();
                isLighOn = false;
            } else {
                Log.i("info", "torch is turn on!");
                p.setFlashMode(Parameters.FLASH_MODE_TORCH);
                camera.setParameters(p);
                camera.startPreview();
                isLighOn = true;
            }
        }
    });
    }
 }

【问题讨论】:

    标签: android eclipse led flashlight


    【解决方案1】:

    你可以使用处理程序

    public class Strobe extends Activity {
    
        private LinearLayout mLinearLayout;
    
        private Handler mHander = new Handler();
    
        private boolean mActive = false;
        private boolean mSwap = true;   
    
        private final Runnable mRunnable = new Runnable() {
    
            public void run() {         
                if (mActive) {
                    if (mSwap) {                    
                        mLinearLayout.setBackgroundColor(Color.WHITE);
                        mSwap = false;
                        mHander.postDelayed(mRunnable, 20);
                    } else {
                        mLinearLayout.setBackgroundColor(Color.BLACK);
                        mSwap = true;
                        mHander.postDelayed(mRunnable, 100);
                    }
                }           
            }
        };
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mLinearLayout = (LinearLayout) findViewById(R.id.strobe);
            startStrobe();
        }
    
        private void startStrobe() {        
            mActive = true;
            mHander.post(mRunnable);
        }
    }
    

    为 Activity 设置主题以使其全屏显示。

    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      相关资源
      最近更新 更多