- 浏览: 434302 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
IThead:
纠结了几天,用了你的方法,现在解决了,谢谢!
Eclipse 写Javascript卡死问题 -
Rubicon__:
你好,我在运用PageWidget这个类时,出现第一页翻到第二 ...
android翻书效果实现原理( 贝塞尔曲线绘制原理/点坐标计算) -
lionios:
如果不显示printDialog,则打印出来的是空白页,请问你 ...
Print打印机例子 -
rayln:
weiqiulai 写道哥们儿,我怎么没有看到监控队列的配置和 ...
JMS监听MQ实例 -
weiqiulai:
哥们儿,我怎么没有看到监控队列的配置和代码?
JMS监听MQ实例
参考http://blog.csdn.net/hellogv/article/details/6101663
使用zxing的第三方包. http://code.google.com/p/zxing
请引入一个core.jar和PlanarYUVLuminanceSource.java文件. 下载附件并打开
代码如下:
AndroidManifest.xml
/res/anim/alhp.xml
main.xml
主Activity文件:
SFHCamera.java
兄弟, 不好意思哈, 更新了部分,没更新全. 横线动画部分没更新. 你看看代码我更新了, 加了alph.xml动画效果, 还有就是main.xml中加入了一个View显示一条横线!
使用zxing的第三方包. http://code.google.com/p/zxing
请引入一个core.jar和PlanarYUVLuminanceSource.java文件. 下载附件并打开
代码如下:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.camera" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".CameraActivity" android:screenOrientation="landscape" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.CAMERA"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> </manifest>
/res/anim/alhp.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator"> <alpha android:fromAlpha="1" android:toAlpha="0" android:duration="2000" android:repeatCount="-1"/> </set>
main.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout android:id="@+id/FrameLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <SurfaceView android:layout_height="fill_parent" android:id="@+id/sfvCamera" android:layout_width="fill_parent"></SurfaceView> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_height="fill_parent" android:layout_width="fill_parent"> <ImageView android:id="@+id/ImageView01" android:layout_height="100dip" android:layout_width="160dip"></ImageView> <View android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_width="300dip" android:background="#55FF6666" android:id="@+id/centerView" android:layout_height="180dip"></View> <TextView android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_below="@+id/centerView" android:layout_height="wrap_content" android:text="Scanning..." android:id="@+id/txtScanResult" android:textColor="#FF000000"></TextView> </RelativeLayout> <View android:id="@+id/animationLine" android:layout_width="fill_parent" android:layout_height="2px" android:background="#FF9790" android:layout_gravity="center_vertical"></View> </FrameLayout>
主Activity文件:
package com.camera; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Hashtable; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; import android.hardware.Camera; import android.os.Bundle; import android.view.KeyEvent; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.TextView; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.MultiFormatReader; import com.google.zxing.Result; import com.google.zxing.common.HybridBinarizer; import com.util.PlanarYUVLuminanceSource; import com.util.SFHCamera; public class CameraActivity extends Activity { /** Called when the activity is first created. */ private SurfaceView sfvCamera; private SFHCamera sfhCamera; private ImageView imgView; private View centerView; private TextView txtScanResult; private Timer mTimer; private MyTimerTask mTimerTask; // 按照标准HVGA final static int width = 480; final static int height = 320; int dstLeft, dstTop, dstWidth, dstHeight; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.main); this.setTitle("Android条码/二维码识别Demo-----hellogv"); imgView = (ImageView) this.findViewById(R.id.ImageView01); centerView = (View) this.findViewById(R.id.centerView); sfvCamera = (SurfaceView) this.findViewById(R.id.sfvCamera); sfhCamera = new SFHCamera(sfvCamera.getHolder(), width, height, previewCallback); txtScanResult=(TextView)this.findViewById(R.id.txtScanResult); // 初始化定时器 mTimer = new Timer(); mTimerTask = new MyTimerTask(); mTimer.schedule(mTimerTask, 0, 2000); Animation animation = AnimationUtils.loadAnimation(this, R.anim.alph); ((View)findViewById(R.id.animationLine)).startAnimation(animation); } class MyTimerTask extends TimerTask { @Override public void run() { if (dstLeft == 0) {//只赋值一次 dstLeft = centerView.getLeft() * width / getWindowManager().getDefaultDisplay().getWidth(); dstTop = centerView.getTop() * height / getWindowManager().getDefaultDisplay().getHeight(); dstWidth = ((centerView.getRight() - centerView.getLeft())* width / getWindowManager().getDefaultDisplay().getWidth()); dstHeight = (centerView.getBottom() - centerView.getTop())* height / getWindowManager().getDefaultDisplay().getHeight(); System.out.println("dstLeft:"+dstLeft+" dstTop:"+dstTop+" dstWidth:"+dstWidth+" dstHeight:"+dstHeight); sfhCamera.AutoFocusAndPreviewCallback(); } } } /** * 自动对焦后输出图片 */ private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { //取得指定范围的帧的数据 PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data, width, height, dstLeft, dstTop, dstWidth, dstHeight,false); //取得灰度图 Bitmap mBitmap = source.renderCroppedGreyscaleBitmap(); //显示灰度图 imgView.setImageBitmap(mBitmap); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); MultiFormatReader reader = new MultiFormatReader(); try { saveImage(mBitmap); Hashtable hints = new Hashtable(); hints.put(DecodeHintType.CHARACTER_SET, "UTF-8"); Result result = reader.decode(bitmap,hints); String strResult = "BarcodeFormat:" + result.getBarcodeFormat().toString() + " text:" + result.getText(); txtScanResult.setText(strResult); } catch (Exception e) { txtScanResult.setText("Scanning"); sfhCamera.AutoFocusAndPreviewCallback(); } } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){ sfhCamera.closeCamera(); } return super.onKeyDown(keyCode, event); } @Override protected void onResume() { if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } super.onResume(); } private void saveImage(Bitmap mBitmap){ File file=new File("/sdcard/feng.png"); try { FileOutputStream out=new FileOutputStream(file); if(mBitmap.compress(Bitmap.CompressFormat.PNG, 50, out)){ out.flush(); out.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
SFHCamera.java
package com.util; import java.io.IOException; import android.graphics.PixelFormat; import android.hardware.Camera; import android.util.Log; import android.view.SurfaceHolder; public class SFHCamera implements SurfaceHolder.Callback{ private SurfaceHolder holder = null; private Camera mCamera; private int width,height; private Camera.PreviewCallback previewCallback; public SFHCamera(SurfaceHolder holder,int w,int h,Camera.PreviewCallback previewCallback) { this.holder = holder; this.holder.addCallback(this); this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); width=w; height=h; this.previewCallback=previewCallback; } @Override public void surfaceChanged(SurfaceHolder arg0, int format, int w, int h) { Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(width, height);//设置尺寸 parameters.setPictureFormat(PixelFormat.JPEG); // parameters.set("orientation", "portrait"); mCamera.setParameters(parameters); mCamera.startPreview();//开始预览 Log.e("Camera","surfaceChanged"); } @Override public void surfaceCreated(SurfaceHolder arg0) { mCamera = Camera.open();//启动服务 // mCamera.setDisplayOrientation(90); try { mCamera.setPreviewDisplay(holder);//设置预览 Log.e("Camera","surfaceCreated"); } catch (IOException e) { mCamera.release();//释放 mCamera = null; } } @Override public void surfaceDestroyed(SurfaceHolder arg0) { /* mCamera.setPreviewCallback(null); mCamera.stopPreview();//停止预览 mCamera = null; */ Log.e("Camera","surfaceDestroyed"); } /** * 自动对焦并回调Camera.PreviewCallback */ public void AutoFocusAndPreviewCallback() { if(mCamera!=null) mCamera.autoFocus(mAutoFocusCallBack); } /** * 自动对焦 */ private Camera.AutoFocusCallback mAutoFocusCallBack = new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { mCamera.setOneShotPreviewCallback(previewCallback); } }; public void closeCamera(){ mCamera.stopPreview(); mCamera.release(); mCamera = null; } }
- android.zip (238.7 KB)
- 下载次数: 194
评论
3 楼
liangzedong
2012-09-06
Dear 楼主,
按照您的步骤做了,但是在真机上面运行后报错,本人愚笨,能否把您的demo发给我,我的邮箱495014644@qq.com ,感谢至极!
按照您的步骤做了,但是在真机上面运行后报错,本人愚笨,能否把您的demo发给我,我的邮箱495014644@qq.com ,感谢至极!
2 楼
rayln
2011-11-15
web8610 写道
兄弟 这个代码缺文件 R.anim.alph R.id.animationLine 能不能发给我啊 77892906@qq.com 万分感谢
兄弟, 不好意思哈, 更新了部分,没更新全. 横线动画部分没更新. 你看看代码我更新了, 加了alph.xml动画效果, 还有就是main.xml中加入了一个View显示一条横线!
1 楼
web8610
2011-11-15
兄弟 这个代码缺文件 R.anim.alph R.id.animationLine 能不能发给我啊 77892906@qq.com 万分感谢
发表评论
-
背景图平铺
2013-12-05 10:12 884以LinearLayout为例,它提供的background属 ... -
应用加载完成调用的方法
2013-12-04 17:09 784@Override public void ... -
MAC系统下COCOS2D-X(IPHONE-ANDROID)及IDE的开发环境搭建
2013-11-11 16:30 1238最近正在做移动多平台对应游戏框架的调查,因为之前业余时间一直使 ... -
Android多分辨率自适应
2013-10-17 14:41 1486转载: http://blog.csdn.net/soesa/ ... -
Android的系统通知栏小例子
2013-07-19 15:35 719package com.example.notificatio ... -
Android开机广播和关机广播
2013-04-07 11:23 1231http://blog.csdn.net/coolszy/ar ... -
Android发送短信
2013-03-07 17:29 729public void sendMsg(String numb ... -
Android查询所有联系人和根据号码查询联系人方法
2013-03-07 11:11 1038直接看例子: package com.msg.util; ... -
Android短信接收
2013-03-06 14:30 711package com.msg.vo; import a ... -
通过ActionBar设置Tabs
2013-02-28 17:32 1290在网上竟然很少这个完整的例子, 我这里做一个例子让大家分享一下 ... -
Android的ActionBar菜单使用
2013-02-28 16:25 1801使用ActionBar设置菜单例子 /res/menu/ac ... -
TabHost的基本使用方法
2013-02-28 11:17 1006非常简单的例子说明一个TabHost的使用 <Rela ... -
android翻书效果实现原理( 贝塞尔曲线绘制原理/点坐标计算)
2012-04-28 16:43 2434转载: http://www.open-open. ... -
贝塞尔曲线画法
2012-04-28 13:21 2378转载:http://blog.csdn.net/xiaomin ... -
CALL拨打电话
2011-11-22 11:11 882public void onCreate(Bundle sav ... -
SMS短信发送
2011-11-22 11:06 987直接看例子: main.xml <?xml versi ... -
开机启动Service
2011-11-21 15:17 707AndroidManifest.xml <?xml ve ... -
监听电话状态
2011-11-21 11:14 760请看程序 PhoneActivity.java package ... -
App播放Music
2011-11-21 10:45 584/** * 播放录音文件 * @p ... -
MediaRecorder录制音频
2011-11-21 10:43 1332一个录音的小程序!! Main.xml <?xml v ...
相关推荐
标题“ZXing条形码扫描”指的是使用ZXing库进行条形码的读取和解析。ZXing支持多种条码格式,包括常见的EAN-13、UPC-A、QR Code、Data Matrix、Aztec Code等。在Android应用中,ZXing通常通过Camera源来捕获图像,...
"ZXing条形码扫描DEMO"是基于ZXing库的一个简单示例,帮助开发者快速理解如何在Android应用中实现条形码扫描。 在这个DEMO中,有两个关键的文件部分: 1. **Jar包**:这里提到的两个`.jar`文件很可能是ZXing的核心...
《Android Zxing条码扫描源码解析》 在Android应用开发中,Zxing(又称为ZXing,意为“快速可扩展的二进制解码”)是一个强大的开源项目,专注于各种类型的条码扫描和生成。它提供了跨平台的库,使得开发者能够轻松...
【安卓ZXING条码扫描无错版】是一个专为Android平台设计的条形码和二维码扫描工具,基于开源项目ZXing(Zebra Crossing)进行优化和调试,确保了其在运行过程中不会出现任何错误,提供了稳定且高效的扫描体验。ZXing...
【Zxing条形码二维码扫描】是一个针对移动设备的开源项目,主要功能是实现条形码和二维码的扫描与解码。Zxing,全称"ZXing (Zebra Crossing)",是一个多平台的、开放源代码的条码读取库。它的目标是提供一种简单、...
google开源项目ZXing条码扫描Android版最新程序,3.2版
标题“ZXing条码扫描精简版”表明这是ZXing原版库的一个轻量级版本,开发者已经将其裁剪,去除了不常用的功能,专注于条码和二维码的扫描。对于那些只需要基本扫描功能且不希望引入过多额外代码的开发者来说,这样的...
**Android-zxing条码扫描视图** 在Android应用开发中,条码扫描功能是一个常见的需求,用于读取商品信息、二维码链接等数据。ZXing(Zebra Crossing)是一个开源项目,提供了一套全面的条码读取库,适用于多种平台...
总之,集成Zxing到Android应用中,可以让你轻松实现条码扫描功能。但要注意,良好的用户体验和性能优化是关键。在实际开发过程中,你可能需要根据具体需求进行定制和调整,以满足不同场景的应用。
综上所述,【条码扫描器】是一个针对Android平台优化过的条码扫描解决方案,它简化了复杂的ZXing库,使初学者能快速上手。通过理解并运用其中的技术,开发者可以构建出高效、功能丰富的条码扫描应用。
这个名为`TwoBarCodesDemo`的压缩包可能包含了一个示例项目,展示了如何结合以上知识点,实现一个能自定义扫描框的二维码和条形码扫描器。下载并研究此DEMO,可以帮助你更好地理解和运用ZXing库。
《Zxing:打造高效能的条形码与二维码扫描应用》 Zxing,全称“ZXing,意为“zebra crossing”(斑马线),是一个开源的、跨平台的条形码和二维码读取库。它允许开发者轻松地集成条码和二维码扫描功能到他们的应用...
总的来说,这个项目为开发者提供了一种实现自定义UI的二维码和条形码扫描功能的方法,利用了ZXing的强大解码能力,同时保持了与应用整体风格的一致性,对于需要类似功能的Android开发者来说具有很高的参考价值。...
本篇文章将详细介绍ZXing在Android开发中的应用以及如何使用ZXing创建一个简单的扫码器APP。 首先,我们需要理解ZXing的核心功能。ZXing提供了多种条码和二维码的编码与解码能力,包括但不限于QR码、Code 128、EAN-...
这个“安卓ZXing扫码.zip”文件包含的应该是ZXing库的最新版本,专为Android设备优化,以提供快速、稳定的条码扫描功能。下面将详细介绍ZXing库以及其在Android开发中的应用。 ZXing(二维码)库是Google开发的一个...
ZXing,又称为“条形码扫描器”,是一个开源的、多平台的二维码和一维条形码读取库。在Python中,我们可以通过调用ZXing的Java接口来实现相同的功能,这通常通过Java的Jython接口或者使用Java的`java.lang.reflect`...
3. **初始化条形码扫描器** - 创建一个`CaptureActivity`,继承自`Activity`,并实现` BarrettCodeReader`的回调接口`DecodeCallback`。 - 在`onResume()`方法中开启相机预览和扫描,`onPause()`时关闭。 4. **...
Zxing(又名ZXing,意为“zebra crossing”)是一个开源项目,提供了跨平台的多种条码读取功能,包括二维码和条形码。在这个项目中,我们将讨论如何在Android Studio环境下,利用Zxing库来实现一个仿微信的自定义扫...