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

来源:互联网 发布:软通动力java试题2016 编辑:程序博客网 时间:2024/05/16 19:11


实现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 0
原创粉丝点击