Android左右滑动切换图片
16lz
2021-01-26
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"?>
更多相关文章
- android 加载大图的原理和实现
- 有用代码片段
- retrofit2持久化保存cookie
- java 编译中常用函数
- android之setBackgroundDrawable()
- JAVA-ANDROID
- Android(安卓)GifImageView加载Gif图片及原理
- 在Android工程中,添加ICON资源
- Android(安卓)Webview 部分图片显示不出来问题