IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 二维码框4个角&上下滚动条&闪光灯,双非渣本Android四年磨一剑 -> 正文阅读

[移动开发]Android 二维码框4个角&上下滚动条&闪光灯,双非渣本Android四年磨一剑

@Override

public void onDraw(Canvas canvas) {

// 中间的扫描框,你要修改扫描框的大小,去CameraManager里面修改

Rect frame = CameraManager.get().getFramingRect();

if (frame == null) {

return;

}

// 初始化中间线滑动的最上边和最下边

if (!isFirst) {

isFirst = true;

slideTop = frame.top;

slideBottom = frame.bottom;

}

// 获取屏幕的宽和高

int width = canvas.getWidth();

int height = canvas.getHeight();

// 画出扫描框外面的阴影部分,共四个部分,扫描框的上面到屏幕上面,扫描框的下面到屏幕下面

// 扫描框的左边面到屏幕左边,扫描框的右边到屏幕右边

// Draw the exterior (i.e. outside the framing rect) darkened

paint.setColor(resultBitmap != null ? resultColor : maskColor);

canvas.drawRect(0, 0, width, frame.top, paint);

canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);

canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1,

paint);

canvas.drawRect(0, frame.bottom + 1, width, height, paint);

if (resultBitmap != null) {

// Draw the opaque result bitmap over the scanning rectangle

paint.setAlpha(OPAQUE);

canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint);

} else {

// 画扫描框边上的角,总共8个部分

paint.setColor(Color.GREEN);

canvas.drawRect(frame.left, frame.top, frame.left + ScreenRate,

frame.top + CORNER_WIDTH, paint);

canvas.drawRect(frame.left, frame.top, frame.left + CORNER_WIDTH, frame.top

  • ScreenRate, paint);

canvas.drawRect(frame.right - ScreenRate, frame.top, frame.right,

frame.top + CORNER_WIDTH, paint);

canvas.drawRect(frame.right - CORNER_WIDTH, frame.top, frame.right, frame.top

  • ScreenRate, paint);

canvas.drawRect(frame.left, frame.bottom - CORNER_WIDTH, frame.left

  • ScreenRate, frame.bottom, paint);

canvas.drawRect(frame.left, frame.bottom - ScreenRate,

frame.left + CORNER_WIDTH, frame.bottom, paint);

canvas.drawRect(frame.right - ScreenRate, frame.bottom - CORNER_WIDTH,

frame.right, frame.bottom, paint);

canvas.drawRect(frame.right - CORNER_WIDTH, frame.bottom - ScreenRate,

frame.right, frame.bottom, paint);

//绘制中间的线,每次刷新界面,中间的线往下移动SPEEN_DISTANCE

slideTop += SPEEN_DISTANCE;

if(slideTop >= frame.bottom){

slideTop = frame.top;

}

Rect lineRect = new Rect();

lineRect.left = frame.left;

lineRect.right = frame.right;

lineRect.top = slideTop;

lineRect.bottom = slideTop + 18;

canvas.drawBitmap(((BitmapDrawable)(getResources().getDrawable(R.drawable.qrcode_scan_line))).getBitmap(), null, lineRect, paint);

//画扫描框下面的字

paint.setColor(Color.WHITE);

paint.setTextSize(TEXT_SIZE * density);

paint.setAlpha(0x40);

paint.setTypeface(Typeface.create(“System”, Typeface.BOLD));

String text = “将二维码放入框内, 即可自动扫描”;

float textWidth = paint.measureText(text);

canvas.drawText(text, (width

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

  • textWidth)/2, (float) (frame.bottom + (float)TEXT_PADDING_TOP *density), paint);

Collection currentPossible = possibleResultPoints;

Collection currentLast = lastPossibleResultPoints;

if (currentPossible.isEmpty()) {

lastPossibleResultPoints = null;

} else {

possibleResultPoints = new HashSet(5);

lastPossibleResultPoints = currentPossible;

paint.setAlpha(OPAQUE);

paint.setColor(resultPointColor);

for (ResultPoint point : currentPossible) {

canvas.drawCircle(frame.left + point.getX(), frame.top

  • point.getY(), 6.0f, paint);

}

}

if (currentLast != null) {

paint.setAlpha(OPAQUE / 2);

paint.setColor(resultPointColor);

for (ResultPoint point : currentLast) {

canvas.drawCircle(frame.left + point.getX(), frame.top

  • point.getY(), 3.0f, paint);

}

}

//只刷新扫描框的内容,其他地方不刷新

postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top,

frame.right, frame.bottom);

}

}

(二)闪光灯


首先在carmra布局中加一个按钮或者图片按钮

<Button

android:id="@+id/btn_light"

android:layout_width=“230dp”

android:layout_height=“40dp”

android:layout_alignParentBottom=“true”

android:layout_centerInParent=“true”

android:layout_marginBottom=“25dp”

android:text=“打开闪光灯”

android:textSize=“15sp”

android:textStyle=“bold” />

注意的一点是系统中只能存在一个Camera对象 ,所以在CameraManager中加一个获取Camera对象的方法

public static Camera getCamera(){

return camera;

}

声明一个Camera属性

初始化:

CameraManager.get().openDriver(surfaceHolder);

camera = CameraManager.getCamera();

在操作扫描二维码的activity中设置按钮的监听事件

//开闭闪光灯事件

lightButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

if (lightButton.getText().toString().equals(“打开闪光灯”)) {

parameter = camera.getParameters();

parameter.setFlashMode(Parameters.FLASH_MODE_TORCH);

camera.setParameters(parameter);

lightButton.setText(“关闭闪光灯”);

} else if (lightButton.getText().toString().equals(“关闭闪光灯”)) {

parameter = camera.getParameters();

parameter.setFlashMode(Parameters.FLASH_MODE_OFF);

camera.setParameters(parameter);

lightButton.setText(“打开闪光灯”);

}

}

});

<Button

android:id="@+id/btn_light"

android:layout_width=“230dp”

android:layout_height=“40dp”

android:layout_alignParentBottom=“true”

android:layout_centerInParent=“true”

android:layout_marginBottom=“25dp”

android:text=“打开闪光灯”

android:textSize=“15sp”

android:textStyle=“bold” />

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:23:13  更:2021-12-06 15:24:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:53:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码