扫描二维码

来源:互联网 发布:HIS系统数据库类型 编辑:程序博客网 时间:2024/06/05 04:52
导入依赖
        compile 'com.journeyapps:zxing-android-embedded:3.3.0'
添加权限
<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.FLASHLIGHT" />

跳转页面package com.example.ningac.day5;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;import com.google.zxing.integration.android.IntentIntegrator;import com.google.zxing.integration.android.IntentResult;/** * Created by Ning.A.C on 2017/11/5. */public class Ewm extends AppCompatActivity {    private TextView tv;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.er);        tv = (TextView) findViewById(R.id.tv);        //假如你要用的是fragment进行界面的跳转        //IntentIntegrator intentIntegrator = IntentIntegrator.forSupportFragment(ShopFragment.this).setCaptureActivity(CustomScanAct.class);        IntentIntegrator intentIntegrator = new IntentIntegrator(Ewm.this);        intentIntegrator                .setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES)                .setPrompt("将二维码/条码放入框内,即可自动扫描")//写那句提示的话                .setOrientationLocked(false)//扫描方向固定                .setCaptureActivity(CustomScanAct.class) // 设置自定义的activity是CustomActivity                .initiateScan(); // 初始化扫描    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);        if (intentResult != null) {            if (intentResult.getContents() == null) {            } else {                // ScanResult 为获取到的字符串                String ScanResult = intentResult.getContents();                tv.setText(ScanResult);            }        } else {            super.onActivityResult(requestCode, resultCode, data);        }    }}

主页面package com.example.ningac.day5;import android.content.Intent;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.app.FragmentTransaction;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import com.google.zxing.integration.android.IntentIntegrator;import com.google.zxing.integration.android.IntentResult;import java.util.List;public class MainActivity extends FragmentActivity { private List<Fragment> fs; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyTitle myTitle = (MyTitle) findViewById(R.id.mytitle); FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frame,new One()); transaction.commit(); myTitle.setOnMytitleListener(new MyTitle.OnMytitleListener() { @Override public void leftClickListener(View v) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frame,new One()); transaction.commit(); } @Override public void rigClickListener(View v) { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frame,new Two()); transaction.commit(); } }); }}
Fragment第一个页面package com.example.ningac.day5;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.Toast;/** * Created by Ning.A.C on 2017/11/4. */public class One extends Fragment{    private MyView myview;    private Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            Toast.makeText(getContext(),"1212",Toast.LENGTH_LONG).show();            if(msg.what<=100){                myview.setpross(msg.what);                handler.sendEmptyMessageDelayed(msg.what+10,1000);            }        }    };    private View view;    private Button btn;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        view = inflater.inflate(R.layout.one, null);        myview = (MyView) view.findViewById(R.id.myview);        btn = (Button) view.findViewById(R.id.btn);        return view;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                handler.sendEmptyMessage(0);            }        });        Log.d("zzz","2321");        myview.setOnMyViewTener(new MyView.OnMyViewListener() {            @Override            public void pross1(int pross) {                if(myview.getPross()==100){                    Intent intent = new Intent(getContext(), Ewm.class);                    startActivity(intent);                }            }        });    }}
fragment第二个页面package com.example.ningac.day5;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * Created by Ning.A.C on 2017/11/4. */public class Two extends Fragment{    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.two, null);        return view;    }}

标题页面package com.example.ningac.day5;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.widget.Button;import android.widget.RelativeLayout;/** * Created by Ning.A.C on 2017/11/4. */public class MyTitle extends RelativeLayout{    private Button right;    private Button left;    private OnMytitleListener mylistener;    public void setOnMytitleListener(OnMytitleListener mylistener){        if(mylistener!=null){            this.mylistener=mylistener;        }    }    interface OnMytitleListener{        void leftClickListener(View v);        void rigClickListener(View v);    }    public MyTitle(Context context) {        this(context,null);    }    public MyTitle(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public MyTitle(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        inflate(context,R.layout.titles,this);        left = (Button) findViewById(R.id.titles_left);        right = (Button) findViewById(R.id.title_right);        left.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mylistener.leftClickListener(v);            }        });        right.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mylistener.rigClickListener(v);            }        });    }}


第二个页面梯形布局package com.example.ningac.day5;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;/** * Created by Ning.A.C on 2017/11/4. */public class MyViewGroup extends ViewGroup{    private int hig;    private int wid;    public MyViewGroup(Context context) {        this(context,null);    }    public MyViewGroup(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        measureChildren(widthMeasureSpec,heightMeasureSpec);        wid = MeasureSpec.getSize(widthMeasureSpec);        hig = MeasureSpec.getSize(heightMeasureSpec);    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        int w=0;        int h=0;        for(int i=0;i<getChildCount();i++){            View at = getChildAt(i);                at.layout(w,h,w+at.getMeasuredWidth(),h+at.getMeasuredHeight());            h=h+at.getMeasuredHeight();            w=w+at.getMeasuredWidth();            }        }}

第一个页面进度布局package com.example.ningac.day5;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.util.Log;import android.view.View;/** * Created by Ning.A.C on 2017/11/5. */public class MyView extends View{    private int pross=0;    private OnMyViewListener mylistener;    interface OnMyViewListener{        void pross1(int pross);    }    public void setOnMyViewTener(OnMyViewListener mylistener){        this.mylistener=mylistener;    }    public void setpross(int pross){        this.pross=pross;        postInvalidate();        if(mylistener!=null){            mylistener.pross1(pross);        }    }    public MyView(Context context) {        this(context,null);    }    public MyView(Context context, @Nullable AttributeSet attrs) {        this(context, attrs,0);    }    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    public int getPross(){        return pross;    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        int width = getWidth();        int height = getHeight();        int min = Math.min(width, height);        int radius=min/2;        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);        paint.setStyle(Paint.Style.STROKE);        paint.setColor(Color.RED);        canvas.drawCircle(radius,radius,radius,paint);        paint.reset();        paint.setColor(Color.YELLOW);        paint.setStyle(Paint.Style.FILL);        canvas.drawCircle(radius, radius, radius , paint);        paint.reset();        paint.setColor(Color.WHITE);        paint.setStyle(Paint.Style.FILL_AND_STROKE);        canvas.drawCircle(radius, radius, radius-20 , paint);        paint.reset();        paint.setColor(Color.GREEN);        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(20);        RectF rectF=new RectF(10,10,min-10,min-10);        canvas.drawArc(rectF,-90,pross*360/100,false,paint);        paint.reset();        paint.setColor(Color.BLUE);        paint.setTextSize(40);        Rect rect = new Rect();        paint.getTextBounds(pross + "%", 0, String.valueOf(pross).length(),                rect);        int textWidth = rect.width();        int textHeight = rect.height();        Log.d("zzz",textWidth+"  "+textHeight);        canvas.drawText(pross + "%", radius-textWidth/2, radius-textHeight/2, paint);    }}

二维码自定义控件package com.example.ningac.day5;import android.content.Context;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Rect;import android.graphics.Shader;import android.util.AttributeSet;import com.google.zxing.ResultPoint;import com.journeyapps.barcodescanner.ViewfinderView;import java.util.ArrayList;import java.util.List;/** * Created by Ning.A.C on 2017/11/5. */public class CustomViewfinderView extends ViewfinderView {    public int laserLinePosition=0;    public float[] position=new float[]{0f,0.5f,1f};    public int[] colors=new int[]{0x00ffffff,0xffffffff,0x00ffffff};    public LinearGradient linearGradient ;    public CustomViewfinderView(Context context, AttributeSet attrs) {        super(context, attrs);    }    /**     * 重写draw方法绘制自己的扫描框     * @param canvas     */    @Override    public void onDraw(Canvas canvas) {        refreshSizes();        if (framingRect == null || previewFramingRect == null) {            return;        }        Rect frame = framingRect;        Rect previewFrame = previewFramingRect;        int width = canvas.getWidth();        int height = canvas.getHeight();        //绘制4个角        paint.setColor(0xFFFFFFFF);//定义画笔的颜色        canvas.drawRect(frame.left, frame.top, frame.left+70, frame.top+10, paint);        canvas.drawRect(frame.left, frame.top, frame.left + 10, frame.top + 70, paint);        canvas.drawRect(frame.right-70, frame.top, frame.right, frame.top+10, paint);        canvas.drawRect(frame.right-10, frame.top, frame.right, frame.top+70, paint);        canvas.drawRect(frame.left, frame.bottom-10, frame.left+70, frame.bottom, paint);        canvas.drawRect(frame.left, frame.bottom-70, frame.left+10, frame.bottom, paint);        canvas.drawRect(frame.right-70, frame.bottom-10, frame.right, frame.bottom, paint);        canvas.drawRect(frame.right-10, frame.bottom-70, frame.right, frame.bottom, paint);        // 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(CURRENT_POINT_OPACITY);            canvas.drawBitmap(resultBitmap, null, frame, paint);        } else {            //  paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);            //  scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;            int middle = frame.height() / 2 + frame.top;            laserLinePosition=laserLinePosition+5;            if(laserLinePosition>frame.height())            {                laserLinePosition=0;            }            linearGradient= new LinearGradient(frame.left + 1, frame.top+laserLinePosition , frame.right -1 , frame.top +10+laserLinePosition, colors, position, Shader.TileMode.CLAMP);            // Draw a red "laser scanner" line through the middle to show decoding is active            //  paint.setColor(laserColor);            paint.setShader(linearGradient);            //绘制扫描线            canvas.drawRect(frame.left + 1, frame.top+laserLinePosition , frame.right -1 , frame.top +10+laserLinePosition, paint);            paint.setShader(null);            float scaleX = frame.width() / (float) previewFrame.width();            float scaleY = frame.height() / (float) previewFrame.height();            List<ResultPoint> currentPossible = possibleResultPoints;            List<ResultPoint> currentLast = lastPossibleResultPoints;            int frameLeft = frame.left;            int frameTop = frame.top;            if (currentPossible.isEmpty()) {                lastPossibleResultPoints = null;            } else {                possibleResultPoints = new ArrayList<>(5);                lastPossibleResultPoints = currentPossible;                paint.setAlpha(CURRENT_POINT_OPACITY);                paint.setColor(resultPointColor);                for (ResultPoint point : currentPossible) {                    canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX),                            frameTop + (int) (point.getY() * scaleY),                            POINT_SIZE, paint);                }            }            if (currentLast != null) {                paint.setAlpha(CURRENT_POINT_OPACITY / 2);                paint.setColor(resultPointColor);                float radius = POINT_SIZE / 2.0f;                for (ResultPoint point : currentLast) {                    canvas.drawCircle(frameLeft + (int) (point.getX() * scaleX),                            frameTop + (int) (point.getY() * scaleY),                            radius, paint);                }            }            postInvalidateDelayed(16,                    frame.left ,                    frame.top ,                    frame.right ,                    frame.bottom);            // postInvalidate();        }    }}

闪光灯视图package com.example.ningac.day5;import android.app.Activity;import android.content.pm.PackageManager;import android.os.Bundle;import android.os.PersistableBundle;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.journeyapps.barcodescanner.CaptureManager;import com.journeyapps.barcodescanner.DecoratedBarcodeView;/** * Created by Ning.A.C on 2017/11/5. */public class CustomScanAct extends Activity implements DecoratedBarcodeView.TorchListener {    // 添加一个按钮用来控制闪光灯,同时添加两个按钮表示其他功能,先用Toast表示    Button swichLight;    DecoratedBarcodeView mDBV;    private CaptureManager captureManager;    private boolean isLightOn = false;    @Override    protected void onPause() {        super.onPause();        captureManager.onPause();    }    @Override    protected void onResume() {        super.onResume();        captureManager.onResume();    }    @Override    protected void onDestroy() {        super.onDestroy();        captureManager.onDestroy();    }    @Override    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {        super.onSaveInstanceState(outState, outPersistentState);        captureManager.onSaveInstanceState(outState);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        return mDBV.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.act_customscan);        swichLight = (Button) findViewById(R.id.btn_switch);        mDBV= (DecoratedBarcodeView) findViewById(R.id.dbv_custom);        mDBV.setTorchListener(this);        // 如果没有闪光灯功能,就去掉相关按钮        if (!hasFlash()) {            swichLight.setVisibility(View.GONE);        }        //重要代码,初始化捕获        captureManager = new CaptureManager(this, mDBV);        captureManager.initializeFromIntent(getIntent(), savedInstanceState);        captureManager.decode();        //选择闪关灯        swichLight.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (isLightOn) {                    mDBV.setTorchOff();                } else {                    mDBV.setTorchOn();                }            }        });    }    // torch 手电筒    @Override    public void onTorchOn() {        Toast.makeText(this, "torch on", Toast.LENGTH_LONG).show();        isLightOn = true;    }    @Override    public void onTorchOff() {        Toast.makeText(this, "torch off", Toast.LENGTH_LONG).show();        isLightOn = false;    }    // 判断是否有闪光灯功能    private boolean hasFlash() {        return getApplicationContext().getPackageManager()                .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);    }}


原创粉丝点击