100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

时间:2024-07-03 01:37:30

相关推荐

Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

Java|java教程

android zxing 二维码 拉伸

Java-java教程

先给大家展示下效果图:

蓝色asp网站模板源码,ubuntu怎么清空arp,tomcat每天0点重启,移动6.5系统爬虫,php文件用什么软件打开运行,成为seo高手lzw

开源的php商城系统源码下载,vscode搜文件,ubuntu 放大镜,tomcat 开启异步,sqlite展示毫秒,bootstrap 下拉菜单 插件,ext4前端框架,爬虫文档教学,获取数组 php,seo运营团队,上传图片 网站源码,网页静态翻页效果,html左右菜单模板,网页页面动态效果代码,linux下的图书管理系统,最土团购程序下载lzw

扫描内容是下面这张,二维码是用zxing库生成的

球球源码管理在哪里看,vscode配置文件调试,ubuntu无法千兆,tomcat安装环境设置,爬虫构建图片,PHP下载系统窗价格,上海服务专业的seo优化,免费培训学校网站源码,zhongwen网站模板lzw

由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java

package com.zxing.activity;import java.io.IOException;import java.util.Vector;import android.app.Activity;import android.content.Intent;import android.content.res.AssetFileDescriptor;import android.graphics.Bitmap;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Handler;import android.os.Vibrator;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.widget.Toast;import com.ericssonlabs.R;import com.google.zxing.BarcodeFormat;import com.google.zxing.Result;import com.zxing.camera.CameraManager;import com.zxing.decoding.CaptureActivityHandler;import com.zxing.decoding.CaptureActivityHandler.DecodeCallback;import com.zxing.decoding.InactivityTimer;import com.zxing.view.ViewfinderView;/*** Initial the camera* @author Ryan.Tang* @modifier Lemon* @use extends CaptureActivity并且在setContentView方法后调用init方法*/public abstract class CaptureActivity extends Activity implements Callback, DecodeCallback {// private static final String TAG = "CaptureActivity";protected Activity context;protected SurfaceView surfaceView;protected ViewfinderView viewfinderView;/**初始化,必须在setContentView之后* @param context* @param viewfinderView*/protected void init(Activity context, SurfaceView surfaceView, ViewfinderView viewfinderView) {this.context = context;this.surfaceView = surfaceView;this.viewfinderView = viewfinderView;CameraManager.init(getApplication());hasSurface = false;inactivityTimer = new InactivityTimer(this);}private CaptureActivityHandler handler;private boolean hasSurface;private Vector decodeFormats;private String characterSet;private InactivityTimer inactivityTimer;private MediaPlayer mediaPlayer;private boolean playBeep;private static final float BEEP_VOLUME = .f;private boolean vibrate;@Overrideprotected void onResume() {super.onResume();SurfaceHolder surfaceHolder = surfaceView.getHolder();if (hasSurface) {initCamera(surfaceHolder);} else {surfaceHolder.addCallback(this);surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}decodeFormats = null;characterSet = null;playBeep = true;AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {playBeep = false;}initBeepSound();vibrate = true;}@Overrideprotected void onPause() {super.onPause();if (handler != null) {handler.quitSynchronously();handler = null;}CameraManager.get().closeDriver();}@Overrideprotected void onDestroy() {inactivityTimer.shutdown();super.onDestroy();}public static final String RESULT_QRCODE_STRING = "RESULT_QRCODE_STRING";/*** Handler scan result* @param result* @param barcode*/public void handleDecode(Result result, Bitmap barcode) {inactivityTimer.onActivity();playBeepSoundAndVibrate();String resultString = result.getText();//FIXMEif (resultString.equals("")) {Toast.makeText(CaptureActivity.this, "Scan failed!", Toast.LENGTH_SHORT).show();}setResult(RESULT_OK, new Intent().putExtra(RESULT_QRCODE_STRING, resultString));finish();}private void initCamera(SurfaceHolder surfaceHolder) {try {CameraManager.get().openDriver(surfaceHolder);} catch (IOException ioe) {return;} catch (RuntimeException e) {return;}if (handler == null) {handler = new CaptureActivityHandler(this, decodeFormats,characterSet, viewfinderView, this);}}@Overridepublic void drawViewfinder() {viewfinderView.drawViewfinder(); }@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {if (!hasSurface) {hasSurface = true;initCamera(holder);}}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {hasSurface = false;}public Handler getHandler() {return handler;}private void initBeepSound() {if (playBeep && mediaPlayer == null) {// The volume on STREAM_SYSTEM is not adjustable, and users found it// too loud,// so we now play on the music stream.setVolumeControlStream(AudioManager.STREAM_MUSIC);mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setOnCompletionListener(beepListener);AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep);try {mediaPlayer.setDataSource(file.getFileDescriptor(),file.getStartOffset(), file.getLength());file.close();mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);mediaPlayer.prepare();} catch (IOException e) {mediaPlayer = null;}}}private static final long VIBRATE_DURATION = L;private void playBeepSoundAndVibrate() {if (playBeep && mediaPlayer != null) {mediaPlayer.start();}if (vibrate) {Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);vibrator.vibrate(VIBRATE_DURATION);}}/*** When the beep has finished playing, rewind to queue up another one.*/private final OnCompletionListener beepListener = new OnCompletionListener() {public void onCompletion(MediaPlayer mediaPlayer) {mediaPlayer.seekTo();}};}

使用方法: 新建一个Activity继承CaptureActivity并且在setContentView方法后调用init方法即可。

示例:

CameraScanActivity.java

package zuo.biao.activity;import zuo.biao.R;import zuo.biao.library.interfaces.OnBottomDragListener;import zuo.biao.util.ActivityUtil;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import com.zxing.activity.CaptureActivity;import com.zxing.camera.CameraManager;import com.zxing.view.ViewfinderView;/**扫描二维码Activity* @author Lemon* @use 参考zuo.biao.library.ModelActivity*/public class CameraScanActivity extends CaptureActivity implements Callback, OnClickListener, OnBottomDragListener {public static final String TAG = "CameraScanActivity";//启动方法<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.camera_scan_activity);init(this, (SurfaceView) findViewById(R.id.svCameraScan), (ViewfinderView) findViewById(R.id.vfvCameraScan));//功能归类分区方法,必须调用<<<<<<<<<>>>>>>>>>}//UI显示区(操作UI,但不存在数据获取或处理代码,也不存在事件监听代码)<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//data数据区(存在数据获取或处理代码,但不存在事件监听代码)<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//listener事件监听区(只要存在事件监听代码就是)<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<public void initListener() {//必须调用findViewById(R.id.tvCameraScanReturn).setOnClickListener(this);findViewById(R.id.ivCameraScanReturn).setOnClickListener(this);findViewById(R.id.ivCameraScanLight).setOnClickListener(this);findViewById(R.id.ivCameraScanMyQRCode).setOnClickListener(this);}//系统自带监听方法<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@Overridepublic void onDragBottom(boolean rightToLeft) {if (rightToLeft) {return;}finish();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tvCameraScanReturn:case R.id.ivCameraScanReturn:onDragBottom(false);break;case R.id.ivCameraScanLight:switchLight(! isOpen);break;case R.id.ivCameraScanMyQRCode://break;default:break;}}private boolean isOpen = false;/**打开或关闭闪关灯* @param open*/private void switchLight(boolean open) {if (open == isOpen) {return;}isOpen = CameraManager.get().switchLight(open);}//类相关监听<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//系统自带监听方法>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//listener事件监听区(只要存在事件监听代码就是)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//内部类,尽量少用<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}

CameraScanActivity布局文件camera_scan_activity.xml

布局文件因为使用了ZBLibrary中的一些style,color等,只有这个layout的话会出现一些错误。自己新建一个layout文件并把ViewfinderView放到最外层布局文件内就行了。当然下载好下面附上的源码就没这问题了。

对了,记得在AndroidManifest.xml中加上这些权限:

附源码(含使用方法)

GitHub源码/TommyLemon/Android-ZBLibrary

开源中国源码 /Lemon19950301/Android-ZBLibrary

关于Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题就给大家介绍到这里,以上内容有点长,希望大家能耐心看完,有任何问题欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对PHP中文网的支持!

更多Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题相关文章请关注PHP中文网!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。