macgg 发表于 2013-8-28 16:27

二维码简化

92Xml代码http://www.apkbus.com/data/attachment/forum/201307/12/163911jdd7x6vs6v7x73jg.jpg   
   
Xml代码http://www.apkbus.com/data/attachment/forum/201307/12/163911s2n740w90n005zhh.jpg   
   
Java代码http://www.apkbus.com/data/attachment/forum/201307/12/163912k92gi622eozsgses.jpg   
   
Java代码http://www.apkbus.com/data/attachment/forum/201307/12/163912iq3vcv8qvsqfasl3.jpg   
   
Java代码http://www.apkbus.com/data/attachment/forum/201307/12/163912rpmjcpmpdac2gq95.jpg   
   
Java代码http://www.apkbus.com/data/attachment/forum/201307/12/163912wvq16kx601mzvkeh.jpg   
   
Java代码http://www.apkbus.com/data/attachment/forum/201307/12/163912iqlpj00jgqbg6fll.jpg   
   
Java代码http://www.apkbus.com/data/attachment/forum/201307/12/163912lyhe1m6ze1h1e6s7.jpg   
   
Java代码http://www.apkbus.com/data/attachment/forum/201307/12/163912wj3xlkpjhkvx33jv.jpg   
   
public class CaptureActivity extends Activity implements Callback {      private CaptureActivityHandler handler;      private ViewfinderView viewfinderView;      private boolean hasSurface;      private Vector<BarcodeFormat> decodeFormats;      private String characterSet;      private TextView txtResult;      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.main);          //初始化 CameraManager          CameraManager.init(getApplication());            viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);          txtResult = (TextView) findViewById(R.id.txtResult);          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();      }      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();      }      public void handleDecode(Result obj, Bitmap barcode) {          inactivityTimer.onActivity();          viewfinderView.drawResultBitmap(barcode);         playBeepSoundAndVibrate();          txtResult.setText(obj.getBarcodeFormat().toString() + ":"                  + obj.getText());      }      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);          }      };   
   
   
简化过的包结构图: http://www.apkbus.com/data/attachment/forum/201307/22/150831flvlczyqludrpgmb.gif 简化后的ZXing 更加方便我们了解ZXing项目 是如何解码的。只要仔细查看源码,进行单点跟踪调试,相信大家很容易能理解。   
页: [1]
查看完整版本: 二维码简化