Android集成ZXing二维码扫描,附加竖屏并且不拉伸图片的demo

在开发中我们可能会需要我们的APP具有扫描二维码的功能,本文将介绍一个直接可以借用的二维码扫描demo来帮助新手们在集成二维码扫描时所遇到的问题.

如果你还不清楚ZXing,推荐先阅读此博客: http://blog.csdn.net/guolin_blog/article/details/9526247

能解决的问题:

<1.教你1分钟集成二维码扫描功能到你的APP里.

<2.解决从其他网站或博客下载的demo发现扫描的时候图片出现拉伸的问题.

<3.解决扫描速度比较慢的问题.


一.首先贴上我们的项目结构图:(此项目是一个月前从CSDN下载解决了图片拉伸问题的代码,并非本人原创)


废话不多说,推荐先下载代码运行后,大致理解一下项目逻辑,(代码下载在本文最后)。

现在开始我们的快速集成:

1.通过项目结构我们发现 MainActivity类对应程序第一个界面,此界面只有一个按钮用于跳转,CaptureActivity对应二维码扫描界面,ShowActivity用于结果显示,数据交互通过Bundle传递,代码如下(CaptureActivity类中):

	/** 结果处理 */
	public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
		inactivityTimer.onActivity();
		beepManager.playBeepSoundAndVibrate();

		String msg = rawResult.getText();
		if (msg == null || "".equals(msg)) {
			msg = "无法识别";
		}

		Intent intent = new Intent(CaptureActivity.this, ShowActivity.class);
		Bundle bundle = new Bundle();
		bundle.putString("msg", msg);
		intent.putExtras(bundle);
		startActivity(intent);
	}
2.如何提高扫描速度我们通过两种方法解决,首先提高相机自动对焦速度,更改com.zf.myzxing.camera包中的AutoFocusManager中的自动对焦间隔时间即可,减小即为缩短自动对焦时间.

private static final long AUTO_FOCUS_INTERVAL_MS = 1000L;

具体实现通过:

	private final class AutoFocusTask extends AsyncTask<Object, Object, Object> {
		@Override
		protected Object doInBackground(Object... voids) {
			try {
				Thread.sleep(AUTO_FOCUS_INTERVAL_MS);
			} catch (InterruptedException e) {
				// continue
			}
			synchronized (AutoFocusManager.this) {
				if (active) {
					start();
				}
			}
			return null;
		}
	}

然后我们可以通过增加扫描框的面积来增加二维码扫描速度,我们知道在二维码扫描过程中,当扫描框全部覆盖二维码时才能扫描到二维码结果,所以我们通过增加扫描框的面积来增加扫描速度是可行的,通过修改com.zf.myzxing.camera包中的CameraManager类的getFramingRect()方法里生成framingRect的参数来修改扫描框面积:代码如下

	public synchronized Rect getFramingRect() {
		if (framingRect == null) {
			if (camera == null) {
				return null;
			}
			Point screenResolution = configManager.getScreenResolution();
			if (screenResolution == null) {
				// Called early, before init even finished
				return null;
			}

			/* 扫描框修改 */
			DisplayMetrics metrics = context.getResources().getDisplayMetrics();
			
			//我们可以通过修改下面width height 里0.8 1.0参数 来改变高和宽
			int width = (int) (metrics.widthPixels * 0.8);
			int height = (int) (width * 1.0);

			int leftOffset = (screenResolution.x - width) / 2;
			int topOffset = (screenResolution.y - height) / 4;
			framingRect = new Rect(leftOffset, topOffset, leftOffset + width,
					topOffset + height);
			Log.d(TAG, "Calculated framing rect: " + framingRect);
		}
		return framingRect;
	}

修改下面的参数即可.
			int width = (int) (metrics.widthPixels * 0.8);
			int height = (int) (width * 1.0);

3.如果你想修改扫描界面UI直接在layout里的capture.xml中修改即可,比如添加提示语:

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <SurfaceView
            android:id="@+id/preview_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

        <com.zf.myzxing.view.ViewfinderView
            android:id="@+id/viewfinder_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
        
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="100dp"
	    android:text="请将二维码放入扫描框中"
	    android:layout_gravity="center"
	    android:textColor="#F1F1F1"
            />
        
    </FrameLayout>
4.最后在集成的时候别忘记在AndroidManifest.xml添加权限,以及配置Activity.

看一下我们的成果 是不是不存在图片拉伸了:



配置完以上四步,我们自己的二维码扫描就完成了,^_^扫描下面的二维码实验一下成果?



代码下载地址









  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 是一种操作系统,而 Google 的 ZXing 是一个开源的二维码扫描库。通过使用 ZXing 库,我们可以轻松地在 Android 应用程序中实现二维码扫描功能。 要在 Android 应用中使用 ZXing,首先需要在项目的 build.gradle 文件中添加以下依赖: ``` implementation 'com.google.zxing:core:3.3.3' implementation 'com.journeyapps:zxing-android-embedded:4.0.0' ``` 接下来,在布局文件中添加一个 SurfaceView 控件,用于显示相机预览画面。 然后,在 Activity 或 Fragment 中添加以下代码: ``` private IntentIntegrator integrator; @Override protected void onCreate(Bundle savedInstanceState) { // ... integrator = new IntentIntegrator(this); integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); integrator.setPrompt("请将二维码放入扫描框中"); integrator.setCameraId(0); // 后置摄像头 integrator.setBeepEnabled(false); // 关闭扫描提示音 integrator.setBarcodeImageEnabled(false); // 保存扫描图片 integrator.initiateScan(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (result != null) { if (result.getContents() == null) { // 用户取消了扫描 } else { String scanResult = result.getContents(); // 在这里处理扫描得到的二维码数据 } } } ``` 在上述代码中,通过 `IntentIntegrator` 类来发起扫描,并在 `onActivityResult` 方法中处理扫描结果。 以上是使用 ZXing 库实现 Android 中的二维码扫描的简要介绍。使用 ZXing 库可以方便地实现二维码扫描功能,并且还提供了许多其他定制选项和扩展功能,可以根据需要进行使用和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值