充电桩app代码

ShowImageActivity.java 10KB

    package com.electric.chargingpile.activity; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.PointF; import android.graphics.RectF; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.WindowManager; import android.widget.ImageView; import com.electric.chargingpile.R; import com.nostra13.universalimageloader.core.ImageLoader; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class ShowImageActivity extends Activity implements OnTouchListener { private ImageView imgv; private PointF point0 = new PointF(); private PointF pointM = new PointF(); private final float ZOOM_MIN_SPACE = 10f; // 设定事件模式 private final int NONE = 0; private final int DRAG = 1; private final int ZOOM = 2; private int mode = NONE; private Matrix matrix = new Matrix(); private Matrix savedMatrix = new Matrix(); // 获取屏幕分辨率。以480*320为例 private int displayHeight; private int displayWidth; private float minScale = 1f; private float maxScale = 10f; private float currentScale = 1f; private float oldDist; private Bitmap bm; private String pic_url; private int imgWidth; private int imgHeight; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_show_image); WindowManager wm = (WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE); displayWidth = wm.getDefaultDisplay().getWidth(); displayHeight = wm.getDefaultDisplay().getHeight(); initData(); init(); } Handler hand = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 2: hahs(); break; default: break; } } ; }; private void init() { imgv = (ImageView) findViewById(R.id.imgv); imgv.setOnTouchListener(this); // bm = BitmapFactory.decodeResource(getResources(), // R.drawable.bg_banner2_0); // Bitmap bitmap = ImageLoader.getInstance().loadImageSync(pic_url); // Bitmap bm=xxx; //xxx根据你的情况获取 // // Drawable drawable = (Drawable)bitmapDrawable; // // Bitmap bitmap = new Bitmap (); // Drawable drawable = new BitmapDrawable(bitmap); new Thread(new Runnable() { @Override public void run() { bm = ImageLoader.getInstance().loadImageSync(pic_url); if (bm != null) { Message mes = new Message(); mes.obj = bm; mes.what = 2; hand.sendMessage(mes); } } }).start(); } private void hahs() { // WindowManager wm = (WindowManager)getApplication().getSystemService(Context.WINDOW_SERVICE); // displayWidth = wm.getDefaultDisplay().getWidth(); imgWidth = bm.getWidth(); imgHeight = bm.getHeight(); imgv.setImageBitmap(bm); minScale = getMinScale(); matrix.setScale(minScale, minScale); center(); imgv.setImageMatrix(matrix); } private void initData() { pic_url = getIntent().getStringExtra("pic_url"); Log.e("pic_url", pic_url); } @Override public boolean onTouchEvent(MotionEvent event) { finish(); return true; } @Override public boolean onTouch(View v, MotionEvent event) { ImageView imgv = (ImageView) v; switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: savedMatrix.set(matrix); point0.set(event.getX(), event.getY()); mode = DRAG; break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); if (oldDist > ZOOM_MIN_SPACE) { savedMatrix.set(matrix); setMidPoint(event); mode = ZOOM; } break; case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_MOVE: whenMove(event); break; // case MotionEvent.ACTION_CANCEL: // finish(); // break; // case Moti } imgv.setImageMatrix(matrix); checkView(); return true; } private void whenMove(MotionEvent event) { switch (mode) { case DRAG: matrix.set(savedMatrix); matrix.postTranslate(event.getX() - point0.x, event.getY() - point0.y); break; case ZOOM: float newDist = spacing(event); if (newDist > ZOOM_MIN_SPACE) { matrix.set(savedMatrix); float sxy = newDist / oldDist; System.out.println(sxy + "<==放大缩小倍数"); matrix.postScale(sxy, sxy, pointM.x, pointM.y); } break; } } // 两个触点的距离 private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return (float) Math.sqrt(x * x + y * y); } private void setMidPoint(MotionEvent event) { float x = event.getX(0) + event.getY(1); float y = event.getY(0) + event.getY(1); pointM.set(x / 2, y / 2); } // 图片居中 private void center() { RectF rect = new RectF(0, 0, imgWidth, imgHeight); matrix.mapRect(rect); float width = rect.width(); float height = rect.height(); float dx = 0; float dy = 0; if (width < displayWidth) dx = displayWidth / 2 - width / 2 - rect.left; else if (rect.left > 0) dx = -rect.left; else if (rect.right < displayWidth) dx = displayWidth - rect.right; if (height < displayHeight) dy = displayHeight / 2 - height / 2 - rect.top; else if (rect.top > 0) dy = -rect.top; else if (rect.bottom < displayHeight) dy = displayHeight - rect.bottom; matrix.postTranslate(dx, dy); } // 获取最小缩放比例 private float getMinScale() { float sx = (float) displayWidth / imgWidth; float sy = (float) displayHeight / imgHeight; float scale = sx < sy ? sx : sy; if (scale > 1) { scale = 1f; } return scale; } // 检查约束条件,是否居中,空间显示是否合理 private void checkView() { currentScale = getCurrentScale(); if (mode == ZOOM) { if (currentScale < minScale) { matrix.setScale(minScale, minScale); } if (currentScale > maxScale) { matrix.set(savedMatrix); } } center(); } // 图片当前的缩放比例 private float getCurrentScale() { float[] values = new float[9]; matrix.getValues(values); return values[Matrix.MSCALE_X]; } public Bitmap getBitMapFromUrl(String url) { Bitmap bitmap = null; URL u = null; HttpURLConnection conn = null; InputStream is = null; try { u = new URL(url); conn = (HttpURLConnection) u.openConnection(); is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); } catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); } } catch (IOException e) { e.printStackTrace(); } conn.disconnect(); } return bitmap; } // public static Bitmap GetLocalOrNetBitmap(String url) // { // Bitmap bitmap = null; // InputStream in = null; // BufferedOutputStream out = null; // try // { // in = new BufferedInputStream(new URL(url).openStream(), Constant.IO_BUFFER_SIZE); // final ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); // out = new BufferedOutputStream(dataStream, Constants.IO_BUFFER_SIZE); // copy(in, out); // out.flush(); // byte[] data = dataStream.toByteArray(); // bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); // data = null; // return bitmap; // } // catch (IOException e) // { // e.printStackTrace(); // return null; // } // } // // private static void copy(InputStream in, OutputStream out) // throws IOException { // byte[] b = new byte[IO_BUFFER_SIZE]; // int read; // while ((read = in.read(b)) != -1) { // out.write(b, 0, read); // } // } /** * return a bitmap from service * * @param url * @return bitmap type */ public final static Bitmap returnBitMap(String url) { URL myFileUrl = null; Bitmap bitmap = null; try { myFileUrl = new URL(url); HttpURLConnection conn; conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bitmap; } }