package com.quark.company.function;
import java.io.UnsupportedEncodingException;
import java.util.Hashtable;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.ColorDrawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.PopupWindow;
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 com.qingmu.jianzhidaren.R;
public class CodePopupWindow extends PopupWindow {
private Button btn_cancel;
private View mMenuView;
private ImageView qrImgImageView;
Bitmap mBitmap;
public int status = 0;
// 图片宽度的一般
private static final int IMAGE_HALFWIDTH = 50;
public CodePopupWindow(Activity context, OnClickListener itemsOnClick,String code_url)
throws WriterException {
super(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.alert_dialog_code, null);
qrImgImageView = (ImageView) mMenuView.findViewById(R.id.qiandao_code);
// 生成二维码
// res= getResources();activity的方法上下文获取
mBitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.code_logo);
// 缩放图片
Matrix m = new Matrix();
float sx = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getWidth();
float sy = (float) 2 * IMAGE_HALFWIDTH / mBitmap.getHeight();
m.setScale(sx, sy);
// 重新构造一个40*40的图片
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(),
mBitmap.getHeight(), m, false);
// mBitmap = EncodingHandler.createQRCode(url, 420);//生成二维码
WindowManager wm = (WindowManager)context
.getSystemService(Context.WINDOW_SERVICE);
Log.e("codeUrl", "返codeUrl来的数据" + code_url);
try {
int width = wm.getDefaultDisplay().getWidth();//屏幕
int height = wm.getDefaultDisplay().getHeight();
mBitmap = cretaeBitmap(new String(code_url.getBytes(), "ISO-8859-1"),width*1/3);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
qrImgImageView.setImageBitmap(mBitmap);
btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);
// 取消按钮
btn_cancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 销毁弹出框
status= 1;
dismiss();
}
});
// 设置SelectPicPopupWindow的View
this.setContentView(mMenuView);
// 设置SelectPicPopupWindow弹出窗体的宽
this.setWidth(LayoutParams.FILL_PARENT);
// 设置SelectPicPopupWindow弹出窗体的高
this.setHeight(LayoutParams.WRAP_CONTENT);
// 设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(true);
// 设置SelectPicPopupWindow弹出窗体动画效果
this.setAnimationStyle(R.style.AnimBottom);
// 实例化一个ColorDrawable颜色为半透明
ColorDrawable dw = new ColorDrawable(0xb0000000);
// 设置SelectPicPopupWindow弹出窗体的背景
this.setBackgroundDrawable(dw);
// mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
mMenuView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = mMenuView.findViewById(R.id.pop_layout).getTop();
int y = (int) event.getY();
if (event.getAction() == MotionEvent.ACTION_UP) {
if (y < height) {
dismiss();
}
}
return true;
}
});
}
/**
* 生成二维码
*
* @param 字符串
* @return Bitmap
* @throws WriterException
*/
public Bitmap cretaeBitmap(String str, int widthAndHeight)
throws WriterException {
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// hints.put(EncodeHintType.MARGIN, 1);
// 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
// BitMatrix matrix= new MultiFormatWriter().encode(str,
// BarcodeFormat.QR_CODE, 300, 300);
BitMatrix matrix = new MultiFormatWriter().encode(str,
BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight, hints);
int width = matrix.getWidth();
int height = matrix.getHeight();
// 二维矩阵转为一维像素数组,也就是一直横着排了,logo位于中间
int halfW = width / 2;
int halfH = height / 2;
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (x > halfW - IMAGE_HALFWIDTH && x < halfW + IMAGE_HALFWIDTH
&& y > halfH - IMAGE_HALFWIDTH
&& y < halfH + IMAGE_HALFWIDTH) {
pixels[y * width + x] = mBitmap.getPixel(x - halfW
+ IMAGE_HALFWIDTH, y - halfH + IMAGE_HALFWIDTH);
} else {
if (matrix.get(x, y)) {
pixels[y * width + x] = 0xff000000;
} else { // 无信息设置像素点为白色
pixels[y * width + x] = 0xffffffff;
}
}
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height,
Bitmap.Config.ARGB_8888);
// 通过像素数组生成bitmap
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
}