导入依赖
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); } }
扫描二维码
最新推荐文章于 2024-07-19 17:43:15 发布