首页 > 学院 > 开发设计 > 正文

二维码生成

2019-11-09 15:39:41
字体:
来源:转载
供稿:网友
//生成二维码package com.xiaoyu.qrcode;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.WriterException;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.QRCodeWriter;import java.util.HashMap;import java.util.Map;public class MainActivity extends AppCompatActivity {    PRivate Button bt1;    private Button bt2;    private ImageView iv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找控件        bt1 = (Button) findViewById(R.id.bt1);        bt2 = (Button) findViewById(R.id.bt2);        iv = (ImageView) findViewById(R.id.iv);        initEvens();    }    /**     * 生成二维码     */    private void initEvens() {        bt1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Bitmap qrBitmap = generateBitmap("薛浅浅",521, 520);                iv.setImageBitmap(qrBitmap);            }        });        /**         * 自定义二维码         */        bt2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Bitmap qrBitmap = generateBitmap("浅宝宝",520, 521);                //背景图片                //Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.mipmap.xiaoyu);                //添加logo                Bitmap logoBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.nuanbao);                Bitmap bitmap = addLogo(qrBitmap, logoBitmap);                //Bitmap bitmap2 = addBackground(bitmap, bitmap1);                iv.setImageBitmap(bitmap);            }        });    }    /**     * 二维码图片     * @param content     * @param width     * @param height     * @return     */    private Bitmap generateBitmap(String content,int width, int height) {        QRCodeWriter qrCodeWriter = new QRCodeWriter();        Map<EncodeHintType, String> hints = new HashMap<>();        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");        try {            BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height);            int[] pixels = new int[width * height];            for (int i = 0; i < height; i++) {                for (int j = 0; j < width; j++) {                    if (encode.get(j, i)) {                        pixels[i * width + j] = 0x00088800;                    } else {                        pixels[i * width + j] = 0xffff666f;                    }                }            }            return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565);        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    /**     * 自定义二维码图片   带logo     * @param qrBitmap     * @param logoBitmap     * @return     */    private Bitmap addLogo(Bitmap qrBitmap, Bitmap logoBitmap) {        int qrBitmapWidth = qrBitmap.getWidth();        int qrBitmapHeight = qrBitmap.getHeight();        int logoBitmapWidth = logoBitmap.getWidth();        int logoBitmapHeight = logoBitmap.getHeight();        Bitmap blankBitmap = Bitmap.createBitmap(qrBitmapWidth, qrBitmapHeight, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(blankBitmap);        canvas.drawBitmap(qrBitmap, 0, 0, null);        canvas.save(Canvas.ALL_SAVE_FLAG);        float scaleSize = 1.0f;        while ((logoBitmapWidth / scaleSize) > (qrBitmapWidth / 5) || (logoBitmapHeight / scaleSize) > (qrBitmapHeight / 5)) {            scaleSize *= 2;        }        float sx = 1.0f / scaleSize;        canvas.scale(sx, sx, qrBitmapWidth / 2, qrBitmapHeight / 2);        canvas.drawBitmap(logoBitmap, (qrBitmapWidth - logoBitmapWidth) / 2, (qrBitmapHeight - logoBitmapHeight) / 2, null);        canvas.restore();        return blankBitmap;    }    /**     * 给二维码图片加背景     *     */    public static Bitmap addBackground(Bitmap foreground,Bitmap background){        int bgWidth = background.getWidth();        int bgHeight = background.getHeight();        int fgWidth = foreground.getWidth();        int fgHeight = foreground.getHeight();        Bitmap newmap = Bitmap                .createBitmap(bgWidth, bgHeight, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(newmap);        canvas.drawBitmap(background, 0, 0, null);        canvas.drawBitmap(foreground, (bgWidth - fgWidth) / 2,                (bgHeight - fgHeight) *3 / 5+70, null);        canvas.save(Canvas.ALL_SAVE_FLAG);        canvas.restore();        return newmap;    }}//自定义xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.baway.qrcode.MainActivity">    <Button        android:id="@+id/bt1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="生成二维码" />    <Button        android:id="@+id/bt2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="生成自定义二维码" />    <ImageView        android:id="@+id/iv"        android:layout_width="200dp"        android:layout_height="200dp" /></LinearLayout>
//基于Android实现个性彩色好看的二维码http://www.jb51.net/article/80001.htm//识别二维码
package com.xiaoyu.orcode_identify;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    private final static int SCANNIN_GREQUEST_CODE = 1;    /**     * 显示扫描结果     */    private TextView mTextView ;    /**     * 显示扫描拍的图片     */    private ImageView mImageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mTextView = (TextView) findViewById(R.id.result);        mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);        //点击按钮跳转到二维码扫描界面,这里用的是startActivityForResult跳转        //扫描完了之后调到该界面        Button mButton = (Button) findViewById(R.id.button1);        mButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent();                intent.setClass(MainActivity.this, MipcaActivityCapture.class);                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                startActivityForResult(intent, SCANNIN_GREQUEST_CODE);            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        switch (requestCode) {            case SCANNIN_GREQUEST_CODE:                if(resultCode == RESULT_OK){                    Bundle bundle = data.getExtras();                    //显示扫描到的内容                    mTextView.setText(bundle.getString("result"));                    //显示                    mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));                }                break;        }    }}//
package com.xiaoyu.orcode_identify;import java.io.IOException;import java.util.Vector;import android.app.Activity;import android.content.Intent;import android.content.res.AssetFileDescriptor;import android.graphics.Bitmap;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.os.Handler;import android.os.Vibrator;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import com.google.zxing.BarcodeFormat;import com.google.zxing.Result;import com.baway.orcode_identify.mining.app.zxing.camera.CameraManager;import com.baway.orcode_identify.mining.app.zxing.decoding.CaptureActivityHandler;import com.baway.orcode_identify.mining.app.zxing.decoding.InactivityTimer;import com.baway.orcode_identify.mining.app.zxing.view.ViewfinderView;/** * Initial the camera * @author Ryan.Tang */public class MipcaActivityCapture extends Activity implements Callback {   private CaptureActivityHandler handler;   private ViewfinderView viewfinderView;   private boolean hasSurface;   private Vector<BarcodeFormat> decodeFormats;   private String characterSet;   private InactivityTimer inactivityTimer;   private MediaPlayer mediaPlayer;   private boolean playBeep;   private static final float BEEP_VOLUME = 0.10f;   private boolean vibrate;   /** Called when the activity is first created. */   @Override   public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_capture);      //ViewUtil.addTopView(getapplicationContext(), this, R.string.scan_card);      CameraManager.init(getApplication());      viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);      Button mButtonBack = (Button) findViewById(R.id.button_back);      mButtonBack.setOnClickListener(new OnClickListener() {         @Override         public void onClick(View v) {            MipcaActivityCapture.this.finish();         }      });      hasSurface = false;      inactivityTimer = new InactivityTimer(this);   }   @Override   protected void onResume() {      super.onResume();      SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);      SurfaceHolder surfaceHolder = surfaceView.getHolder();      if (hasSurface) {         initCamera(surfaceHolder);      } else {         surfaceHolder.addCallback(this);         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      }      decodeFormats = null;      characterSet = null;      playBeep = true;      AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);      if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {         playBeep = false;      }      initBeepSound();      vibrate = true;   }   @Override   protected void onPause() {      super.onPause();      if (handler != null) {         handler.quitSynchronously();         handler = null;      }      CameraManager.get().closeDriver();   }   @Override   protected void onDestroy() {      inactivityTimer.shutdown();      super.onDestroy();   }   /**    * 处理扫描结果    * @param result    * @param barcode    */   public void handleDecode(Result result, Bitmap barcode) {      inactivityTimer.onActivity();      playBeepSoundAndVibrate();      String resultString = result.getText();      if (resultString.equals("")) {         Toast.makeText(MipcaActivityCapture.this, "Scan failed!", Toast.LENGTH_SHORT).show();      }else {         Intent resultIntent = new Intent();         Bundle bundle = new Bundle();         bundle.putString("result", resultString);//       bundle.putParcelable("bitmap", barcode);         resultIntent.putExtras(bundle);         this.setResult(RESULT_OK, resultIntent);      }      MipcaActivityCapture.this.finish();   }   private void initCamera(SurfaceHolder surfaceHolder) {      try {         CameraManager.get().openDriver(surfaceHolder);      } catch (IOException ioe) {         return;      } catch (RuntimeException e) {         return;      }      if (handler == null) {         handler = new CaptureActivityHandler(this, decodeFormats, characterSet);      }   }   @Override   public void surfaceChanged(SurfaceHolder holder, int format, int width,                        int height) {   }   @Override   public void surfaceCreated(SurfaceHolder holder) {      if (!hasSurface) {         hasSurface = true;         initCamera(holder);      }   }   @Override   public void surfaceDestroyed(SurfaceHolder holder) {      hasSurface = false;   }   public ViewfinderView getViewfinderView() {      return viewfinderView;   }   public Handler getHandler() {      return handler;   }   public void drawViewfinder() {      viewfinderView.drawViewfinder();   }   private void initBeepSound() {      if (playBeep && mediaPlayer == null) {         // The volume on STREAM_SYSTEM is not adjustable, and users found it         // too loud,         // so we now play on the music stream.         setVolumeControlStream(AudioManager.STREAM_MUSIC);         mediaPlayer = new MediaPlayer();         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);         mediaPlayer.setOnCompletionListener(beepListener);         AssetFileDescriptor file = getResources().openRawResourceFd(               R.raw.beep);         try {            mediaPlayer.setDataSource(file.getFileDescriptor(),                  file.getStartOffset(), file.getLength());            file.close();            mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);            mediaPlayer.prepare();         } catch (IOException e) {            mediaPlayer = null;         }      }   }   private static final long VIBRATE_DURATION = 200L;   private void playBeepSoundAndVibrate() {      if (playBeep && mediaPlayer != null) {         mediaPlayer.start();      }      if (vibrate) {         Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);         vibrator.vibrate(VIBRATE_DURATION);      }   }   /**    * When the beep has finished playing, rewind to queue up another one.    */   private final OnCompletionListener beepListener = new OnCompletionListener() {      public void onCompletion(MediaPlayer mediaPlayer) {         mediaPlayer.seekTo(0);      }   };}//配置清单文件
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.xiaoyu.orcode_identify"    >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="16" />    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/APPTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".MipcaActivityCapture"            android:configChanges="orientation|keyboardHidden"            android:screenOrientation="portrait"            android:windowSoftInputMode="stateAlwaysHidden" >        </activity>    </application>    <uses-permission android:name="android.permission.FlashLIGHT" />    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.CAMERA" />    <uses-feature android:name="android.hardware.camera" />    <uses-feature android:name="android.hardware.camera.autofocus" /></manifest>//简单的xml// activity_main
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.baway.orcode_identify.MainActivity">    <Button        android:id="@+id/button1"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:text="扫描二维码" />    <TextView        android:id="@+id/result"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/button1"        android:lines="2"        android:gravity="center_horizontal"        android:textColor="@android:color/black"        android:textSize="16sp" />    <ImageView        android:id="@+id/qrcode_bitmap"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_alignParentLeft="true"        android:layout_below="@+id/result"/></RelativeLayout>// activity_title
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.baway.orcode_identify.MainActivity">    <Button        android:id="@+id/button_back"        android:layout_width="75.0dip"        android:text="返回"        android:background="@drawable/mm_title_back_btn"        android:textColor="@android:color/white"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_marginLeft="2dip" />    <TextView        android:id="@+id/textview_title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBaseline="@+id/button_back"        android:layout_alignBottom="@+id/button_back"        android:layout_centerHorizontal="true"        android:gravity="center_vertical"        android:text="二维码扫描"        android:textColor="@android:color/white"        android:textSize="18sp" /></RelativeLayout>//activity_capture
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent" >        <SurfaceView            android:id="@+id/preview_view"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_gravity="center" />        <com.baway.orcode_identify.mining.app.zxing.view.ViewfinderView            android:id="@+id/viewfinder_view"            android:layout_width="wrap_content"            android:layout_height="wrap_content" />        <include            android:id="@+id/include1"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_alignParentTop="true"            layout="@layout/activity_title" />    </RelativeLayout></FrameLayout>
上一篇:Lua - 20

下一篇:widget反应慢

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表