采用二次开发android-zxingLibrary
网址:https://github.com/yipianfengye/android-zxingLibrary
一、基本使用
1、compile 'cn.yipianfengye.android:zxing-library:2.2'
2、
public void onCreate() {
super.onCreate();
ZXingLibrary.initDisplayOpinion(this);
}
3、
* 打开默认二维码扫描界面
*/
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
//CaptureActivity.class 项目集成
startActivityForResult(intent, REQUEST_CODE);
}
});
二、自定义UI
1、
在新的Activity中定义Layout布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_second"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/second_button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="10dp"
android:layout_gravity="bottom|center_horizontal"
/>
<FrameLayout
android:id="@+id/fl_my_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
></FrameLayout>
</FrameLayout>
启动id为fl_my_container的FrameLayout就是我们需要替换的扫描组件,也就是说我们会将我们定义的扫描Fragment替换到id为fl_my_container的FrameLayout的位置。而上面的button是我们添加的一个额外的控件,在这里你可以添加任意的控件,各种UI效果等。具体可以看下面在Activity的初始化过程。
2、
在Activity中执行Fragment的初始化操作
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
/**
* 执行扫面Fragment的初始化操作
*/
CaptureFragment captureFragment = new CaptureFragment();
// 为二维码扫描界面设置定制化界面
CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera);
captureFragment.setAnalyzeCallback(analyzeCallback);
/**
* 替换我们的扫描控件
*/ getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();
}
3、
其中analyzeCallback是我们定义的扫描回调函数,其具体的定义:
/**
* 二维码解析回调函数
*/
CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() {
@Override
public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
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);
SecondActivity.this.setResult(RESULT_OK, resultIntent);
SecondActivity.this.finish();
}
@Override
public void onAnalyzeFailed() {
Intent resultIntent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED);
bundle.putString(CodeUtils.RESULT_STRING, "");
resultIntent.putExtras(bundle);
SecondActivity.this.setResult(RESULT_OK, resultIntent);
SecondActivity.this.finish();
}
};
4、
my_camera布局文件的实现。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<SurfaceView
android:id="@+id/preview_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.uuzuche.lib_zxing.view.ViewfinderView
android:id="@+id/viewfinder_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:inner_width="200dp"
app:inner_height="200dp"
app:inner_margintop="150dp"
app:inner_corner_color="@color/scan_corner_color"
app:inner_corner_length="30dp"
app:inner_corner_width="5dp"
app:inner_scan_bitmap="@drawable/scan_image"
app:inner_scan_speed="10"
app:inner_scan_iscircle="false"
/>
</FrameLayout>
//可添加自定义属性
<declare-styleable name="innerrect">
<attr name="inner_width" format="dimension"/><!-- 控制扫描框的宽度 -->
<attr name="inner_height" format="dimension"/><!-- 控制扫描框的高度 -->
<attr name="inner_margintop" format="dimension" /><!-- 控制扫描框距离顶部的距离 -->
<attr name="inner_corner_color" format="color" /><!-- 控制扫描框四角的颜色 -->
<attr name="inner_corner_length" format="dimension" /><!-- 控制扫描框四角的长度 -->
<attr name="inner_corner_width" format="dimension" /><!-- 控制扫描框四角的宽度 -->
<attr name="inner_scan_bitmap" format="reference" /><!-- 控制扫描图 -->
<attr name="inner_scan_speed" format="integer" /><!-- 控制扫描速度 -->
<attr name="inner_scan_iscircle" format="boolean" /><!-- 控制小圆点是否展示 -->
</declare-styleable>
支持控制闪光灯
/**
* 打开闪光灯
*/
CodeUtils.isLightEnable(true);
/**
* 关闭闪光灯
*/
CodeUtils.isLightEnable(false);
网友评论