ImageUtils.java:

 

import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Environment;import android.util.Log;import android.widget.ImageView;/**   * @ClassName: ImageUtils   * @Description: 处理图片的工具类  * @author chenzheng * @date 2014-4-17 下午3:11:08   */public class ImageUtils {/** * 图片基准路径 */private static final String BASE_SDCARD_IMAGES = "/mnt/sdcard/weijie/images/";private static final String TAG = "ImageUtils";/** * 判断文件是否存在 * * @param 文件在本地的完整名 * @return */private static boolean judgeExists(String fullName) {File file = new File(fullName);return file.exists();}/** * 获取最后的‘/’后的文件名 * * @param name * @return */private static String getLastName(String name) {int lastIndexOf = 0;try {lastIndexOf = name.lastIndexOf('/');} catch (Exception e) {e.printStackTrace();}return !name.equals("") ? name.substring(lastIndexOf + 1) : "";}/** * 拼接一个完整的本地文件名 * @param 文件的网络路径 * @return */private static String getImageFullName(String name) {return BASE_SDCARD_IMAGES + getLastName(name);}/** * 通过该网络路径获取Bitmap * @param 该图片的网络路径 */public static Bitmap getBitmap(String urlPath) {Bitmap bitmap = null;String fullName = getImageFullName(urlPath);if (ImageUtils.judgeExists(fullName)) {/* 存在就直接使用 */Log.i(TAG, "使用了sdcard里的图片");bitmap = BitmapFactory.decodeFile(fullName);} else {/* 去下载图片,下载完成之后返回该对象 */Log.i(TAG, "去下载了图片");bitmap = downloadAndSaveBitmap(urlPath, fullName);}return bitmap;}/** * 下载保存图片 * * @param urlPath *            下载路径 * @param fullName *            文件保存路径+文件名 * @return */private static Bitmap downloadAndSaveBitmap(String urlPath, String fullName) {Bitmap bitmap = downloadImage(urlPath);/* 首先判断是否挂载了sdcard */if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {if (bitmap != null) {saveBitmap(fullName, bitmap);}} else {Log.e(TAG, "没有sdcard无法保存图片");}return bitmap;}/** * 保存图片 * * @param fullName * @param bitmap */private static void saveBitmap(String fullName, Bitmap bitmap) {if (bitmap != null) {try {File file = new File(fullName);if (!file.exists()) {creatFolder(fullName);file.createNewFile();}FileOutputStream fos = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);fos.flush();} catch (IOException e) {e.printStackTrace();Log.e(TAG, "图片保存失败,异常信息是:" + e.toString());}} else {Log.e(TAG, "没有下载成功图片,无法保存");}}/** * 创建保存文件的文件夹 * * @param fullName *            带文件名的文件路径 * @return */private static void creatFolder(String fullName) {if (getLastName(fullName).contains(".")) {String newFilePath = fullName.substring(0, fullName.lastIndexOf('/'));File file = new File(newFilePath);file.mkdirs();}}/** * 下载图片 * * @param urlPath * @return */private static Bitmap downloadImage(String urlPath) {try {byte[] byteData = getImageByte(urlPath);if (byteData == null) {Log.e(TAG, "没有得到图片的byte,问题可能是path:" + urlPath);return null;}int len = byteData.length;BitmapFactory.Options options = new BitmapFactory.Options();options.inPreferredConfig = Bitmap.Config.RGB_565;options.inPurgeable = true;options.inInputShareable = true;options.inJustDecodeBounds = false;if (len > 200000) {// 大于200K的进行压缩处理options.inSampleSize = 2;}return BitmapFactory.decodeByteArray(byteData, 0, len);} catch (Exception e) {e.printStackTrace();Log.e(TAG, "图片下载失败,异常信息是:" + e.toString());return null;}}/** * 获取图片的byte数组 * * @param urlPath * @return */private static byte[] getImageByte(String urlPath) {InputStream in = null;byte[] result = null;try {URL url = new URL(urlPath);HttpURLConnection httpURLconnection = (HttpURLConnection) url.openConnection();httpURLconnection.setDoInput(true);httpURLconnection.connect();if (httpURLconnection.getResponseCode() == 200) {in = httpURLconnection.getInputStream();result = readInputStream(in);in.close();} else {Log.e(TAG, "下载图片失败,状态码是:"+ httpURLconnection.getResponseCode());}} catch (Exception e) {Log.e(TAG, "下载图片失败,原因是:" + e.toString());e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}return result;}/** * 将输入流转为byte数组 * * @param in * @return * @throws Exception */private static byte[] readInputStream(InputStream in) throws Exception {ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while ((len = in.read(buffer)) != -1) {baos.write(buffer, 0, len);}baos.close();in.close();return baos.toByteArray();}/** * 此方法用来异步加载图片 * @param imageview * @param path */public static void downloadAsyncTask(final ImageView imageview,final String path) {new AsyncTask() {@Overrideprotected Bitmap doInBackground(String... params) {return getBitmap(path);}@Overrideprotected void onPostExecute(Bitmap result) {super.onPostExecute(result);if (result != null && imageview != null) {imageview.setImageBitmap(result);} else {Log.e(TAG, "在downloadAsyncTask里异步加载图片失败!");}}}.execute(new String[] {});}}

 

 

 

 

 

ProductDetailIndex.java:

 

import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import com.weijie.app_user.R;import com.weijie.app_user.utility.ImageUtils;public class ProductDetailIndex extends Activity {private ViewPager viewPager; // android-support-v4中的滑动组件private int default_bg=R.drawable.a;private List imageViews; // 滑动的图片集合private String[] imageResUrl; // 图片urlprivate List dots; // 图片标题正文的那些点private int currentItem = 0; // 当前图片的索引号private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {if (msg.what == 0) {@SuppressWarnings("unchecked")List bmList=(List) msg.obj;for(int i=0;i();new Thread() {@SuppressWarnings("unchecked")public void run() {List bitmapList = new ArrayList();Message msg = new Message();Bitmap bitmap=null;imageResUrl = new String[] {"http://imgt8.bdstatic.com/it/u=2,1200870009&fm=19&gp=0.jpg","http://imgt3.bdstatic.com/it/u=2483720495,3389680904&fm=21&gp=0.jpg","http://imgt6.bdstatic.com/it/u=2,936516090&fm=19&gp=0.jpg" };for (int i = 0; i < imageResUrl.length; i++) {bitmap=ImageUtils.getBitmap(imageResUrl[i]);bitmapList.add(bitmap);}msg.what = 0;msg.obj = bitmapList;handler.sendMessage(msg);}}.start();dots = new ArrayList();          dots.add((ImageView) findViewById(R.id.v_dot1));          dots.add((ImageView) findViewById(R.id.v_dot2));          dots.add((ImageView) findViewById(R.id.v_dot3));         dots.get(currentItem).setImageResource(R.drawable.orange_btn); }/** * 填充ViewPager页面的适配器 *  * @author Administrator *  */private class MyPagerAdapter extends PagerAdapter {@Overridepublic int getCount() {return imageResUrl.length;}@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(imageViews.get(arg1));return imageViews.get(arg1);}@Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView((View) arg2);}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {}@Overridepublic Parcelable saveState() {return null;}@Overridepublic void startUpdate(View arg0) {}@Overridepublic void finishUpdate(View arg0) {}}/** * 当ViewPager中页面的状态发生改变时调用 *  * @author Administrator *  */private class MyPageChangeListener implements OnPageChangeListener {private int oldPosition = 0;public void onPageSelected(int position) {currentItem = position;dots.get(oldPosition).setImageResource(R.drawable.white_btn);              dots.get(position).setImageResource(R.drawable.orange_btn); oldPosition = position;}public void onPageScrollStateChanged(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}}}

 

 

 

 

 

product_detail_index.xml:

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                    

 

更多相关文章

  1. android 加载大图的原理和实现
  2. 有用代码片段
  3. retrofit2持久化保存cookie
  4. java 编译中常用函数
  5. android之setBackgroundDrawable()
  6. JAVA-ANDROID
  7. Android(安卓)GifImageView加载Gif图片及原理
  8. 在Android工程中,添加ICON资源
  9. Android(安卓)Webview 部分图片显示不出来问题

随机推荐

  1. android中遇到问题总结
  2. android中的Handler(2)
  3. Android(安卓)音频管理器AudioManager类
  4. Android如何保存和读取设置
  5. Android(安卓)增量更新实例(Smart App Upd
  6. Android(安卓)ContentProvider实现应用间
  7. android的文件系统结构及其引导过程的初
  8. Android中使用Streams的两种方法
  9. Android(安卓)Java执行Shell命令
  10. 安装、验证、优化APK