收藏 分享(赏)

Android开发二维码扫描.ppt

上传人:j35w19 文档编号:8649649 上传时间:2019-07-07 格式:PPT 页数:21 大小:1.85MB
下载 相关 举报
Android开发二维码扫描.ppt_第1页
第1页 / 共21页
Android开发二维码扫描.ppt_第2页
第2页 / 共21页
Android开发二维码扫描.ppt_第3页
第3页 / 共21页
Android开发二维码扫描.ppt_第4页
第4页 / 共21页
Android开发二维码扫描.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、,Android是什么?,Android是一个运行在嵌入式Linux操作系统上的设备上的、可灵活部署、可升级的、完全开源代码的、代码符合Apache License、free-software和open source license许可完全商业友好的移动系统平台。Android平台由Google等公司发起建立的开发性厂商联盟组织Open Handset Alliance共同开发。Android平台的目标是以更低的产品研发、设备部署和服务套件成本来开发具有良好界面的手持设备程序和各种移动设备中间件程序。,Android的特点,无需任何许可就可以发布一个应用程序 Android平台所有的API全部

2、透明。无任何隐藏和附加权限即可查看所有API 可自由的组合、修改、扩展任何Android系统组件,Android的资源系统,以二维码扫描为例说明:,Android的权限控制,在AndroidManifest.xml中描述一个app的权限,例如:,Activity的生命周期,Activity简介,在Android 中规定所有的页面元素都必须以Activity形式展现。Activity类中必须实现onCreate方法(此方法就是第一次程序界面展示给用户的初始化方法),必须在所有继承父类的接口处调用super类方法.setContentView()方法:Android中把界面布局元素的展示,存放在l

3、ayout文件夹中的对应的xml文档中。此方法,根据自动生成的R对象中缓存的xml文档类装载入Activity.,二维码扫描演示程序详解,一、xml布局,TextView用来存放解码后显示的信息,Surface 整个底层界面用来显示照相机拍摄到的图像,FrontView 用来把显示到的图像周围都涂成半透明的白色,中间的空白区域用来扫描二维码,ImageView 用来显示扫描二维码成功后截取到的图像,TextView 用来简单介绍本软件可以扫描的范围,Button 用来关闭软件和重新扫描,二、Activity 程序重要部分分析,1、FrontView.java,public void init(

4、) paint = new Paint(); paint.setColor(Color.WHITE); paint.setAlpha(0xff / 2); protected void onDraw(Canvas canvas) int x; int y; int m=480; int n=350; x=canvas.getWidth(); y=canvas.getHeight(); canvas.drawRect(0, 0,x, (y-n)/2,paint); canvas.drawRect(0, (y-n)/2, (x-m)/2, (y-n)/2+n,paint); canvas.draw

5、Rect(x-m)/2+m, (y-n)/2, x, (y-n)/2+n,paint); canvas.drawRect(0, (y-n)/2+n, x, y, paint);,初始化画笔,设置画笔的颜色,并把所绘的地区全部绘为(0xff/2) 半透明。得到canvas画布的长和宽(x,y)绘制四个周边矩形,所绘制的矩形都是半透明的有颜色,只剩下中间一块亮白的地方,paint.setColor(Color.RED);canvas.drawLine(x-m)/2+10, (y-n)/2+10,(x-m)/2+50, (y-n)/2+10, paint); canvas.drawLine(x-m)

6、/2+10, (y-n)/2+10,(x-m)/2+10, (y-n)/2+50, paint);canvas.drawLine(x-m)/2+m-10, (y-n)/2+10,(x-m)/2+m-50, (y-n)/2+10, paint); canvas.drawLine(x-m)/2+m-10, (y-n)/2+10,(x-m)/2+m-10, (y-n)/2+50, paint);canvas.drawLine(x-m)/2+10, (y-n)/2+n-10,(x-m)/2+10, (y-n)/2+n-50, paint); canvas.drawLine(x-m)/2+10, (y-

7、n)/2+n-10,(x-m)/2+50, (y-n)/2+n-10, paint);canvas.drawLine(x-m)/2+m-10, (y-n)/2+n-10,(x-m)/2+m-10, (y-n)/2+n-50, paint); canvas.drawLine(x-m)/2+m-10, (y-n)/2+n-10,(x-m)/2+m-50, (y-n)/2+n-10, paint);canvas.drawLine(210, 400,270, 400, paint); canvas.drawLine(240,370,240,430, paint); ,设置画笔的颜色在扫描区四个角绘制互

8、相垂直的两条直线在扫描中间区域绘制两条垂直的直线,2、BackGround.java,public class BackGround extends View private Paint paint; public BackGround(Context context, AttributeSet attrs) super(context, attrs);init();public BackGround(Context context) super(context);init();private void init()paint = new Paint();paint.setColor(Colo

9、r.GRAY); protected void onDraw(Canvas canvas) int x,y;x=canvas.getWidth();y=canvas.getHeight();canvas.drawRect(0, 700, 480, 800, paint); ,此java文件主要是自定义一个方法,用以在添加的Button下面作为背景图片调用初始化方法init()初始化画笔,并设置颜色得到画布的长和宽,并绘制一个宽480,长100的矩形,2、 PictureSurfaceTest .java,public void surfaceCreated(SurfaceHolder hold

10、er) try Log.e(“Camera“, “Camera open“); flag=true; mCamera = Camera.open(); mCamera.setPreviewDisplay(sfh); catch (Exception e) Log.e(“Camera“,“Camera open exception“); e.printStackTrace(); mCamera.release(); flag=false; mCamera = null; ,此java文件用来调用系统照相机,并实现拍照和自动对焦,打开照相机,并实现预览mCamera.setPreviewDispl

11、ay(sfh); 如果出现异常则释放照相机资源,private void startPerview() if (mCamera != null ,如果照相机拍到的照片不为NULL,并且没有开始预览,则把拍到的图片旋转90度设置预览照片的大小(800*480);开始调用预览方法mCamera.startPreview();,public void surfaceDestroyed(SurfaceHolder holder) mCamera.stopPreview(); mCamera.release(); flag=false; mCamera = null; public void Onfoc

12、us() if(mCamera != null) mCamera.autoFocus(callback); private AutoFocusCallback callback = new AutoFocusCallback() public void onAutoFocus(boolean success, Camera camera) if(success ,释放照相机资源 并停止拍照,用Onfocus()实现自动对焦 Onfocus()的回调函数当成功对焦并且照像不为空时,调用setOneShotPreviewCallback()照相机重新启动,3、PictureTest.java,pr

13、ivate void initView() Log.e(“tag“,“ begin init“); surCameraView = (PictureSurfaceTest) findViewById(R.id.surfaceView); surretake = (PictureSurfaceTest) findViewById(R.id.surfaceView); frontview = (FrontView) findViewById(R.id.frontView); background = (BackGround) findViewById(R.id.background); cance

14、l = (Button) findViewById(R.id.cancel); retake = (Button) findViewById(R.id.retake); /editText = (EditText) findViewById(R.id.edittext); textView=(TextView) findViewById(R.id.textview); imageView = (ImageView) findViewById(R.id.imageview); surCameraView.previewcallback = previewcallback; mTimer = ne

15、w Timer(); mTimerTask = new MyTimerTask(); mTimer.schedule(mTimerTask, 0,200); ,初始化函数,用来初始化各种控件,初始化定时器mTimer 扫描的频率为200ms,public void ClickLietener() cancel.setOnClickListener(new OnClickListener() public void onClick(View v) surCameraView.flag =false; mTimer.cancel(); mTimerTask.cancel(); frontview.

16、init(); finish(); ); retake.setOnClickListener(new OnClickListener() public void onClick(View v) surCameraView.flag = true; mTimer = new Timer(); mTimerTask = new MyTimerTask(); mTimer.schedule(mTimerTask, 0,200); surCameraView.Onfocus(); textView.setText(null); frontview.init(); imageView.setVisibi

17、lity(ImageView.INVISIBLE); ); ,关闭按钮,按下后退出程序,并且释放照相机资源和mTimerTask和Timer,重扫按钮,按下后初始化给种方法,并且 取得照相机资源,把开始显示到的二维码信息抹除和把扫描到的二维码相片设置为不可见,这样我们就能看到一个初始化后的扫描界面,public void run() Log.e(“tag“, “run 执行“); if (surCameraView.flag = true) surCameraView.Onfocus(); else surCameraView.flag =false; mTimer.cancel(); ,线程

18、run()方法中实现,当获得照相机资源时,调用自动对焦方法,否则的话,则释放照相机资源和 mTimer资源,private Camera.PreviewCallback previewcallback = new Camera.PreviewCallback() public void onPreviewFrame(byte data, Camera arg1) Log.e(“tag“, “previewcallback“); PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource( data, 800, 480, dsLe

19、ft, dstop, dswidth, dsheight);mbitmap = source.renderCroppedGreyscaleBitmap(); / 显示灰度图 Matrix matrix = new Matrix(); matrix.setRotate(90); mbitmap = Bitmap.createBitmap(mbitmap, 0, 0, 400, 350, matrix, true); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source); MultiFormatReader reade

20、r = new MultiFormatReader(); try Result result = reader.decode(bitmap); String strResult = “BarcodeFormat:“+ result.getBarcodeFormat().toString() + “ text:“ + result.getText(); frontview.init(); textView.setText(strResult); imageView.setImageBitmap(mbitmap); imageView.setVisibility(ImageView.VISIBLE); surCameraView.flag =false; mTimer.cancel();mTimerTask.cancel(); catch (Exception e) textView.setText(“Scanning“);,取得指定范围的帧的数据,显示灰度图,并且把它旋转90度,在屏幕上方的Textview中显示解码到的信息,在imageView 中显示截取到的二维码图片,把图片设置为可见释放mTimer和mTimerTask资源,三、解码包,可以到网上其他的二维码扫描代码中取得这样一个解码包,也可以去google官方下载,四、软件开始界面和扫描后界面实例,谢谢观看!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报