android 二维码扫描 支持横竖屏切换Demo

来源:互联网 发布:mac版word怎么看字数 编辑:程序博客网 时间:2024/06/03 17:29

    本案例是基于 Github项目解析(十)-->几行代码快速集成二维码扫描库 实现自由切换横竖屏二维码扫描。

这位大神重构zxing库非常简单,并且非常好的扩展性。唯一不足没有支持切换到横屏。


然后根据网上的教程以及对代码的了解进行支持切换到横屏。

一个activity支持横竖屏使用:

public class QrCodeActivity extends FragmentActivity {private CaptureFragment mCaptureFragment;public static boolean isH = true; // 当前是否为横版@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_code);ZXConfig.isH = isH;if (isH) {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 横屏设置} else {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 竖屏设置}/** * 执行扫面Fragment的初始化操作 */mCaptureFragment = new CaptureFragment();// 为二维码扫描界面设置定制化界面CodeUtils.setFragmentArgs(mCaptureFragment, R.layout.layout_qrcode);mCaptureFragment.setAnalyzeCallback(analyzeCallback);/** * 替换我们的扫描控件 */getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, mCaptureFragment).commit();}/** * 二维码解析回调函数 */CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() {@Overridepublic void onAnalyzeSuccess(Bitmap mBitmap, String result) {Toast.makeText(QrCodeActivity.this, "onAnalyzeSuccess:" + result, Toast.LENGTH_LONG).show();mCaptureFragment.restartPreviewAndDecode(); // 重置可以扫// Intent resultIntent = new Intent();// Bundle bundle = new Bundle();// bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS);// bundle.putString(CodeUtils.RESULT_STRING, result);// resultIntent.putExtras(bundle);// QrcodeActivity.this.setResult(RESULT_OK, resultIntent);// QrcodeActivity.this.finish();}@Overridepublic void onAnalyzeFailed() {Toast.makeText(QrCodeActivity.this, "onAnalyzeFailed:解析失败", Toast.LENGTH_LONG).show();// Intent resultIntent = new Intent();// Bundle bundle = new Bundle();// bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED);// bundle.putString(CodeUtils.RESULT_STRING, "");// resultIntent.putExtras(bundle);// QrcodeActivity.this.setResult(RESULT_OK, resultIntent);// QrcodeActivity.this.finish();}};@Overrideprotected void onDestroy() {super.onDestroy();CameraManager.get().onDestroy();}}

独立了一个zxing_lib出来,并且加了一个类ZXConfig。启用扫描时可以改该值进行切换:

findViewById(R.id.tv_h).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {QrCodeActivity.isH = true;startActivity(new Intent(MainActivity.this, QrCodeActivity.class));}});findViewById(R.id.tv_v).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {QrCodeActivity.isH = false;startActivity(new Intent(MainActivity.this, QrCodeActivity.class));}});
效果如下:



代码demo下载