Android仿微信二维码和条码
来源:爱站网时间:2021-01-04编辑:网友分享
绝大多数Android开发者都使用谷歌zxing扫描二维码和条形码,但很多演示的官方和在线扫描界面让人难以忍受,本文是爱站技术频道小编为大家介绍的Android仿微信二维码和条码,感兴趣的小伙伴们进入下文看看吧!
绝大多数Android开发者都使用谷歌zxing扫描二维码和条形码,但很多演示的官方和在线扫描界面让人难以忍受,本文是爱站技术频道小编为大家介绍的Android仿微信二维码和条码,感兴趣的小伙伴们进入下文看看吧!
具体内容如下
package your.QRCode.namespace; import java.io.File; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Map; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.View.MeasureSpec; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class QRCodeTextActivityActivity extends Activity { /** Called when the activity is first created. */ Button btn1 = null; Button btn2 = null; ImageView ivImageView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn1 = (Button) findViewById(R.id.button1);// 条形码 btn2 = (Button) findViewById(R.id.button2);// 二维码 ivImageView = (ImageView) findViewById(R.id.imageView1); final String strconteString = "c2b0f58a6f09cafd1503c06ef08ac7aeb7ddb91a602dac145551c102143e6159e385cdc294"; btn1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Bitmap mBitmap = null; mBitmap = creatBarcode(QRCodeTextActivityActivity.this, strconteString, 300, 300, true); if (mBitmap != null) { ivImageView.setImageBitmap(mBitmap); } } }); btn2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Bitmap mBitmap = null; try { if (!strconteString.equals("")) { mBitmap = Create2DCode(strconteString); // Bitmap bm = // BitmapFactory.decodeResource(getResources(), // R.drawable.diagnose1); ivImageView.setImageBitmap(createBitmap( mBitmap, zoomBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.cccc), 100,100))); } } catch (Exception e) { e.printStackTrace(); } } }); } public Bitmap Create2DCode(String str) throws WriterException { Maphints = new HashMap (); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); hints.put(EncodeHintType.CHARACTER_SET, "GBK"); // hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败 BitMatrix matrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 500, 500, hints); int width = matrix.getWidth(); int height = matrix.getHeight(); // 二维矩阵转为一维像素数组,也就是一直横着排了 int[] pixels = new int[width * height]; for (int i = 0; i
图片美工做下处理。貌似需要做一个描边。png透明背景
在加两个方法
/*** * 缩放图片并加描边 * * @param src * @param destWidth * @param destHeigth * @return */ private Bitmap zoomBitmapBorder(Bitmap src, int destWidth, int destHeigth) { String tag = "lessenBitmap"; if (src == null) { return null; } int w = src.getWidth();// 源文件的大小 int h = src.getHeight(); // calculate the scale - in this case = 0.4f float scaleWidth = ((float) destWidth - 4) / w;// 宽度缩小比例 float scaleHeight = ((float) destHeigth - 4) / h;// 高度缩小比例 Log.d(tag, "bitmap width is :" + w); Log.d(tag, "bitmap height is :" + h); Log.d(tag, "new width is :" + destWidth); Log.d(tag, "new height is :" + destHeigth); Log.d(tag, "scale width is :" + scaleWidth); Log.d(tag, "scale height is :" + scaleHeight); Matrix m = new Matrix();// 矩阵 m.postScale(scaleWidth, scaleHeight);// 设置矩阵比例 Bitmap resizedBitmap = Bitmap.createBitmap(src, 0, 0, w, h, m, true);// 直接按照矩阵的比例把源文件画入进行 Bitmap newb = Bitmap.createBitmap(destWidth, destHeigth, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图 Canvas cv = new Canvas(newb); //cv.drawColor(R.color.white); cv.drawRGB(0,128,128); cv.drawBitmap(resizedBitmap, 2, 2, null);// 设置ic_launcher的位置 // save all clip cv.save(Canvas.ALL_SAVE_FLAG);// 保存 // store cv.restore();// 存储 return getRoundedCornerBitmap(newb); } /** * 图片圆角 * @param bitmap * @return */ public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); final float roundPx = 12; paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; }
上述是爱站技术频道小编介绍的Android仿微信二维码和条码,而微信二维码和条码的开发更加的有利于推广,同时也让项目变得更加新颖且独立。
上一篇:Android屏幕截屏的方法
下一篇:Android工作室的开发技巧