android 下载图片保存在sdcard并显示可拖动缩放

java代码

  1 package com.example.catchlong;

  2 import java.io.BufferedOutputStream;

  3 import java.io.ByteArrayOutputStream;

  4 import java.io.File;

  5 import java.io.FileOutputStream;

  6 import java.io.IOException;

  7 import java.io.InputStream;

  8 import java.net.HttpURLConnection;

  9 import java.net.URL;

 10 

 11 import android.annotation.SuppressLint;

 12 import android.annotation.TargetApi;

 13 import android.app.Activity;

 14 import android.content.Context;

 15 import android.graphics.Bitmap;

 16 import android.graphics.BitmapFactory;

 17 import android.graphics.Canvas;

 18 import android.graphics.Color;

 19 import android.graphics.Matrix;

 20 import android.graphics.Paint;

 21 import android.graphics.PointF;

 22 import android.os.Bundle;

 23 import android.util.DisplayMetrics;

 24 import android.util.FloatMath;

 25 import android.util.Log;

 26 import android.view.GestureDetector;

 27 import android.view.MotionEvent;

 28 import android.view.View;

 29 import android.view.GestureDetector.OnGestureListener;

 30 import android.view.View.OnTouchListener;

 31 import android.view.animation.AnimationUtils;

 32 import android.widget.ImageView;

 33 import android.widget.Toast;

 34 

 35 @SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" })

 36 @TargetApi(5)

 37 public class ImageActivity extends Activity implements OnTouchListener {

 38     //implements OnTouchListener {

 39     private ImageView imgview;

 40     private ImageView img;

 41  

 42     

 43     private Matrix matrix=new Matrix();

 44     private Matrix savedMatrix=new Matrix();

 45     

 46     static final int NONE = 0;  

 47     static final int DRAG = 1;  

 48     static final int ZOOM = 2;  

 49     int mode = NONE;  

 50 

 51     // Remember some things for zooming  

 52     PointF start = new PointF();  

 53     PointF mid = new PointF();  

 54     float oldDist = 1f;  

 55     

 56     //private GestureDetector gesture;

 57     @Override

 58     protected void onCreate(Bundle savedInstanceState) {

 59         // TODO Auto-generated method stub

 60         super.onCreate(savedInstanceState);

 61         this.setContentView(R.layout.imagectrl);

 62         imgview=(ImageView)this.findViewById(R.id.imag);

 63         downloadImage();

 64         //imgview.setAnimation(AnimationUtils.loadAnimation(this, R.anim.newanim));

 65         

 66         

 67         img=(ImageView)this.findViewById(R.id.imag);

 68         Matrix mt=img.getImageMatrix();    

 69         //mt.postRotate(30);

 70         mt.postScale(0.5f,0.5f);mt.postScale(1.5f,1.5f);

 71         //mt.postRotate(30, 130, 100);

 72         mt.postTranslate(100, 10);

 73         

 74         img.setImageMatrix(mt);

 75         

 76     

 77         //imgview.setLongClickable(true);

 78         

 79         //imgview.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.xieer_1));

 80         imgview.setOnTouchListener(this);

 81         imgview.setLongClickable(true);

 82         

 83     }

 84     private float spacing(MotionEvent event) {  

 85         float x = event.getX(0) - event.getX(1);  

 86         float y = event.getY(0) - event.getY(1);  

 87         return FloatMath.sqrt(x * x + y * y);  

 88 }  

 89 

 90  

 91       private void midPoint(PointF point, MotionEvent event) {  

 92         float x = event.getX(0) + event.getX(1);  

 93         float y = event.getY(0) + event.getY(1);  

 94         point.set(x / 2, y / 2);  

 95 }  

 96 

 97     @TargetApi(8)

 98     public boolean onTouch(View v, MotionEvent event) {

 99         // TODO Auto-generated method stub

100         /*

101         Log.d("Infor", "类别:"+event.getAction());

102         Log.d("Infor", "mask:"+event.getActionMasked());

103         Log.d("Infor", "index:"+event.getActionIndex());

104         Log.d("Infor", "points:"+event.getPointerCount());*/

105         Log.d("Infor", "size:"+event.getSize());

106         if(event.getActionMasked()==MotionEvent.ACTION_POINTER_UP)

107             Log.d("Infor", "多点操作");

108         switch(event.getActionMasked()){

109         case MotionEvent.ACTION_DOWN:

110               matrix.set(imgview.getImageMatrix());

111               savedMatrix.set(matrix);

112               start.set(event.getX(),event.getY());

113               Log.d("Infor", "触摸了...");

114               mode=DRAG;

115               break;

116         case MotionEvent.ACTION_POINTER_DOWN:  //多点触控

117              oldDist=this.spacing(event);

118             if(oldDist>10f){

119              Log.d("Infor", "oldDist"+oldDist);

120              savedMatrix.set(matrix);

121              midPoint(mid,event);

122              mode=ZOOM;

123             }

124             break;

125         case MotionEvent.ACTION_POINTER_UP:

126             mode=NONE;

127             break;

128         case MotionEvent.ACTION_MOVE:

129             if(mode==DRAG){         //此实现图片的拖动功能...

130                 matrix.set(savedMatrix);

131                 matrix.postTranslate(event.getX()-start.x, event.getY()-start.y);

132             }

133                 else if(mode==ZOOM){// 此实现图片的缩放功能...

134              float newDist=spacing(event);

135              if(newDist>10){

136                  matrix.set(savedMatrix);

137                  float scale=newDist/oldDist;

138                  matrix.postScale(scale, scale, mid.x, mid.y);                 

139              }

140                 }

141             break;

142         }

143         imgview.setImageMatrix(matrix);

144         return false;

145     }    

146     private void downloadImage(){

147 

148            String filePath= "http://img.jdxi.net/upload/2012/9/201209011610355146.jpg";

149 

150            @SuppressWarnings("unused")

151         String imgName ="liying.jpg";

152 

153              //使用【方法1】取得的是InputStream,直接从InputStream生成bitmap

154 

155             try{

156 

157                 Bitmap bitmap = BitmapFactory.decodeStream(getImageStream(filePath));

158 

159                 if(bitmap!=null){

160 

161                     saveFile(bitmap, "liying.jpg");  //调用保存方法

162                   

163                     String str2 = "/sdcard/mbookyang/liying.jpg";

164 

165                     File file = new File(str2);

166 

167                     if(file.exists()){     //判断文件是否存在

168 

169                         Bitmap bm = BitmapFactory.decodeFile(str2);

170                         //由File获取图片并转为Bitmap

171 

172                        imgview.setImageBitmap(bm);

173 

174                     }

175 

176                 }

177 

178             }

179 

180             catch(Exception e) {            

181                 Toast.makeText(ImageActivity.this,"下载图片失败", Toast.LENGTH_SHORT).show();  

182 

183                 e.printStackTrace();

184 

185             }

186 

187            

188 

189         }

190 

191        

192 

193         //方法1

194 

195         public InputStream getImageStream(String path)throws Exception{     

196 

197             URL url = new URL(path);     

198 

199             HttpURLConnection conn =(HttpURLConnection) url.openConnection();     

200 

201             conn.setConnectTimeout(5 * 1000);        //设定超时

202 

203             conn.setRequestMethod("GET");   //GET为下载,POST为上传

204 

205             if(conn.getResponseCode()== HttpURLConnection.HTTP_OK){     

206 

207                 return conn.getInputStream();         //获得数据流  

208 

209             }     

210 

211             return null;   

212 

213         } 

214 

215        

216 

217         //方法2

218 

219         public byte[] getImage(String path) throws Exception{     

220 

221             URL url = new URL(path);     

222 

223             HttpURLConnection conn =(HttpURLConnection) url.openConnection();     

224 

225             conn.setConnectTimeout(5 * 1000);   

226 

227             conn.setRequestMethod("GET");    

228 

229             InputStream inStream = conn.getInputStream(); 

230 

231             if(conn.getResponseCode()== HttpURLConnection.HTTP_OK){     

232 

233                 return readStream(inStream);     

234 

235             }     

236 

237             return null;     

238 

239         }    

240 

241         public static byte[] readStream(InputStream inStream)throws Exception{     

242 

243             ByteArrayOutputStream outStream = new ByteArrayOutputStream();     

244 

245             byte[]buffer =new byte[1024];     

246 

247             int len =0;     

248 

249             while((len=inStream.read(buffer)) != -1){     

250 

251                 outStream.write(buffer, 0, len);     

252 

253             }     

254 

255             outStream.close();     

256 

257             inStream.close();     

258 

259             return outStream.toByteArray();     

260 

261         }   

262 

263        

264 

265         //保存Bitmap为图片文件

266 

267         public void saveFile(Bitmap bitmap, String fileName) throws IOException {  

268 

269             File dirFile = new File("/sdcard/mbookyang");  

270 

271             if(!dirFile.exists()){  //判断路径是否存在,不存在则创建

272 

273                 dirFile.mkdir();  

274 

275             }

276 

277             File savePath = new File("/sdcard/mbookyang/" + fileName);  //保存路径

278 

279             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(savePath));  

280 

281             bitmap.compress(Bitmap.CompressFormat.JPEG, 80, bos);  //质量压缩为80%

282 

283             bos.flush();  

284 

285             bos.close();  

286 

287         }

288 

289 }

你可能感兴趣的:(android)