EX10_04.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:5k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex10_04;
  2. import android.app.Activity;
  3. import android.graphics.Canvas;
  4. import android.graphics.Paint;
  5. import android.graphics.Rect;
  6. import android.os.Bundle;
  7. import android.util.DisplayMetrics;
  8. import android.util.Log;
  9. import android.view.KeyEvent;
  10. import android.view.SurfaceHolder;
  11. import android.view.SurfaceView;
  12. import android.view.View;
  13. import android.view.Window;
  14. import android.widget.Button;
  15. import android.widget.EditText;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18. public class EX10_04 extends Activity 
  19. implements SurfaceHolder.Callback
  20. {
  21.   private Button mButton01;
  22.   private TextView mTextView01;
  23.   private EditText mEditText01;
  24.   private String TAG = "HIPPO";
  25.   private SurfaceView mSurfaceView01;
  26.   private SurfaceHolder mSurfaceHolder01;
  27.   
  28.   /** Called when the activity is first created. */
  29.   @Override
  30.   public void onCreate(Bundle savedInstanceState)
  31.   {
  32.     super.onCreate(savedInstanceState);
  33.     
  34.     /* 使应用程序全屏幕运行,不使用title bar */
  35.     requestWindowFeature(Window.FEATURE_NO_TITLE);
  36.     setContentView(R.layout.main);
  37.     
  38.     /* 取得屏幕解析像素 */
  39.     DisplayMetrics dm = new DisplayMetrics();
  40.     getWindowManager().getDefaultDisplay().getMetrics(dm);
  41.     
  42.     mTextView01 = (TextView) findViewById(R.id.myTextView1);
  43.     mTextView01.setText(R.string.str_qr_gen);
  44.     
  45.     /* 以SurfaceView作为相机Preview之用 */
  46.     mSurfaceView01 = (SurfaceView) findViewById(R.id.mSurfaceView1);
  47.     
  48.     /* 绑定SurfaceView,取得SurfaceHolder对象 */
  49.     mSurfaceHolder01 = mSurfaceView01.getHolder();
  50.     
  51.     /* Activity必须实现SurfaceHolder.Callback */
  52.     mSurfaceHolder01.addCallback(EX10_04.this);
  53.     
  54.     /* 产生QRCode的按钮事件处理 */
  55.     mButton01 = (Button)findViewById(R.id.myButton1);
  56.     mButton01.setOnClickListener(new Button.OnClickListener()
  57.     {
  58.       @Override
  59.       public void onClick(View arg0)
  60.       {
  61.         // TODO Auto-generated method stub
  62.         if(mEditText01.getText().toString()!="")
  63.         {
  64.           /* 传入setQrcodeVersion为4,仅能接受62个字符 */
  65.           AndroidQREncode(mEditText01.getText().toString(), 4);
  66.         }
  67.       }
  68.     });
  69.     
  70.     mEditText01 = (EditText)findViewById(R.id.myEditText1);
  71.     mEditText01.setText("DavidLanz");
  72.     mEditText01.setOnKeyListener(new EditText.OnKeyListener()
  73.     {
  74.       @Override
  75.       public boolean onKey(View v, int keyCode, KeyEvent event)
  76.       {
  77.         // TODO Auto-generated method stub
  78.         return false;
  79.       }
  80.     });
  81.   }
  82.   
  83.   /* 自定义产生QR Code的函数 */
  84.   public void AndroidQREncode(String strEncoding, int qrcodeVersion)
  85.   {
  86.     try
  87.     {
  88.       /* 建构QRCode编码对象 */
  89.       com.swetake.util.Qrcode testQrcode = 
  90.       new com.swetake.util.Qrcode();
  91.       
  92.       /* L','M','Q','H' */
  93.       testQrcode.setQrcodeErrorCorrect('M');
  94.       /* "N","A" or other */
  95.       testQrcode.setQrcodeEncodeMode('B');
  96.       /* 0-20 */
  97.       testQrcode.setQrcodeVersion(qrcodeVersion);
  98.       
  99.       // getBytes
  100.       byte[] bytesEncoding = strEncoding.getBytes("utf-8");
  101.       
  102.       if (bytesEncoding.length>0 && bytesEncoding.length <120)
  103.       {
  104.         /* 将字符串通过calQrcode函数转换成boolean数组 */
  105.         boolean[][] bEncoding = testQrcode.calQrcode(bytesEncoding);
  106.         
  107.         /* 依据编码后的boolean数组,绘图 */
  108.         drawQRCode
  109.         (bEncoding, getResources().getColor(R.drawable.black));
  110.       }
  111.     }
  112.     catch (Exception e)
  113.     {
  114.       e.printStackTrace();
  115.     }
  116.   }
  117.   
  118.   /* 在SurfaceView上绘制QR Code条形码 */
  119.   private void drawQRCode(boolean[][] bRect, int colorFill)
  120.   {
  121.     /* test Canvas*/
  122.     int intPadding = 20;
  123.     
  124.     /* 欲在SurfaceView上绘图,需先lock锁定SurfaceHolder */
  125.     Canvas mCanvas01 = mSurfaceHolder01.lockCanvas();
  126.     
  127.     /* 设置画布绘制颜色 */
  128.     mCanvas01.drawColor(getResources().getColor(R.drawable.white));
  129.     
  130.     /* 创建画笔 */
  131.     Paint mPaint01 = new Paint();
  132.     
  133.     /* 设置画笔颜色及模式 */
  134.     mPaint01.setStyle(Paint.Style.FILL);
  135.     mPaint01.setColor(colorFill);
  136.     mPaint01.setStrokeWidth(1.0F);
  137.     
  138.     /* 逐一加载2维boolean数组 */
  139.     for (int i=0;i<bRect.length;i++)
  140.     {
  141.       for (int j=0;j<bRect.length;j++)
  142.       {
  143.         if (bRect[j][i])
  144.         {
  145.           /* 依据数组值,绘出条形码方块 */
  146.           mCanvas01.drawRect
  147.           (
  148.             new Rect
  149.             (
  150.               intPadding+j*3+2,
  151.               intPadding+i*3+2,
  152.               intPadding+j*3+2+3,
  153.               intPadding+i*3+2+3
  154.              ), mPaint01
  155.           );
  156.         }
  157.       }
  158.     }
  159.     /* 解锁SurfaceHolder,并绘图 */
  160.     mSurfaceHolder01.unlockCanvasAndPost(mCanvas01);
  161.   }
  162.   
  163.   public void mMakeTextToast(String str, boolean isLong)
  164.   {
  165.     if(isLong==true)
  166.     {
  167.       Toast.makeText(EX10_04.this, str, Toast.LENGTH_LONG).show();
  168.     }
  169.     else
  170.     {
  171.       Toast.makeText(EX10_04.this, str, Toast.LENGTH_SHORT).show();
  172.     }
  173.   }
  174.   
  175.   @Override
  176.   public void surfaceChanged
  177.   (SurfaceHolder surfaceholder, int format, int w, int h)
  178.   {
  179.     // TODO Auto-generated method stub
  180.     Log.i(TAG, "Surface Changed");
  181.   }
  182.   
  183.   @Override
  184.   public void surfaceCreated(SurfaceHolder surfaceholder)
  185.   {
  186.     // TODO Auto-generated method stub
  187.     Log.i(TAG, "Surface Changed");
  188.   }
  189.   
  190.   @Override
  191.   public void surfaceDestroyed(SurfaceHolder surfaceholder)
  192.   {
  193.     // TODO Auto-generated method stub
  194.     Log.i(TAG, "Surface Destroyed");
  195.   }
  196. }