实现android端的类似二维码的扫描窗口(中间亮,四周暗,扫描线循环)


实现android端的类似二维码的扫描窗口(中间亮,四周暗,扫描线循环),效果图:


要实现android端的类似二维码的扫描窗口(中间亮,四周暗,扫描线循环)

主要用到paint类,drawRect()以及drawLine()函数,参数分别是左上点x,左下点y,右上点x,右下点y,画布paint

drawRect(float left, float top, float right, float bottom, Paint paint)
drawLine(float startX, float startY, float stopX, float stopY, Paint paint)

主要流程是:首先,
新建一个类继承于ImageView类,重写onDraw函数。
使用用法:在你需要的.xml布局文件添加上该类    
例如:  新建的扫描窗口类为cameraWindows,在activity_camera.xml上添加该类:
     <com.hongh.camera.cameraWindows
        android:scaleType="fitXY"
        android:adjustViewBounds="true"
        android:layout_width="match_parent"

        android:layout_height="match_parent"/> 


部分核心代码:

            //设置三个Paint画布,分别用于画阴影矩形,蓝色矩形(四个角),蓝色直线(扫描线)</span>
        private Paint mAreaPaint,paint,paint2; 
        mAreaPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint = new Paint();
        paint2 = new Paint();
        mAreaPaint.setColor(Color.BLACK);
        mAreaPaint.setStyle(Paint.Style.FILL);
        mAreaPaint.setAlpha(110);

		//设置画布为蓝色,用于设置扫描窗口边缘的四个角
        paint.setColor(Color.BLUE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(7f);

		//设置画布为蓝色,用于设置扫描线
        paint2.setColor(Color.BLUE);
        paint2.setStrokeWidth(2f);

        <p><span style="font-size: 18px;">        //参数分别是左上点x,左下点y,右上点x,右下点y,画布paint</span></p><span style="font-size: 18px;">        //drawRect(float left, float top, float right, float bottom, Paint paint)</span>
        /***画阴影部分的矩形框****/
        canvas.drawRect(0,0,screenWidth,(screenHeight - Y)/2,mAreaPaint);
        canvas.drawRect(0,(screenHeight - Y)/2,(screenWidth-X)/2,screenHeight,mAreaPaint);
        canvas.drawRect((screenWidth-X)/2+X,(screenHeight - Y)/2,screenWidth,screenHeight,mAreaPaint);
        canvas.drawRect((screenWidth-X)/2,(screenHeight - Y)/2+Y,(screenWidth-X)/2+X,screenHeight,mAreaPaint);

        /***四个角***/
        canvas.drawLine((screenWidth-X)/2,(screenHeight - Y)/2,(screenWidth-X)/2+XX,(screenHeight - Y)/2,paint);
        canvas.drawLine((screenWidth-X)/2,(screenHeight - Y)/2,(screenWidth-X)/2,(screenHeight - Y)/2+XX,paint);
        canvas.drawLine((screenWidth-X)/2+X-XX,(screenHeight - Y)/2,(screenWidth-X)/2+X,(screenHeight - Y)/2,paint);
        canvas.drawLine((screenWidth-X)/2+X,(screenHeight - Y)/2,(screenWidth-X)/2+X,(screenHeight - Y)/2+XX,paint);
        canvas.drawLine((screenWidth-X)/2,(screenHeight - Y)/2+Y-XX,(screenWidth-X)/2,(screenHeight - Y)/2+Y,paint);
        canvas.drawLine((screenWidth-X)/2,(screenHeight - Y)/2+Y,(screenWidth-X)/2+XX,(screenHeight - Y)/2+Y,paint);
        canvas.drawLine((screenWidth-X)/2+X,(screenHeight - Y)/2+Y-XX,(screenWidth-X)/2+X,(screenHeight - Y)/2+Y,paint);
        canvas.drawLine((screenWidth-X)/2+X-XX,(screenHeight - Y)/2+Y,(screenWidth-X)/2+X,(screenHeight - Y)/2+Y,paint);
		
        /*******扫描线*********/
        if(count >Y-20)
            count = 0;
        canvas.drawLine((screenWidth-X)/2+20,(screenHeight - Y)/2+10+count,(screenWidth-X)/2+X-20,(screenHeight - Y)/2+10+count,paint2);
        count+=2;

        invalidate();  //刷新canvas,目的是更新扫描线

源码下载:

http://download.csdn.net/detail/chenmohousuiyue/9643338

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值