Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
来源:互联网 发布:电视直播软件有翡翠台 编辑:程序博客网 时间:2024/04/25 16:43
Android利用Gallery和ImageSwitcher实现相册功能(异步加载图片)
MainActivity.java
package cn.android.gallery;import java.util.ArrayList;import java.util.HashMap;import org.json.JSONArray;import org.json.JSONObject;import android.app.Activity;import android.content.Intent;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.Gallery;import android.widget.Gallery.LayoutParams;import android.widget.ImageView;import cn.android.service.ImageLoader;import cn.android.widget.LoadingViewHandler;/** * 应用入口程序 * @Description MainActivity * @File MainActivity.java * @Package cn.android.gallery * @Author WanTianwen * @Blog http://blog.csdn.net/WanTianwen * @Date 2014-04-13 * @Version V1.0 */public class MainActivity extends Activity {private int goodsId; GoodsListGalleryAdapter adapter; private ArrayList<HashMap<String, String>> goodsGalleryList; public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.goods_detail);Intent intent = getIntent();Bundle bundle = intent.getExtras();goodsId = 99999;//商品ID可以通过意图传值过来String server = getString(R.string.server);String url = server + "getGoodsDetail";String params = "goods_id="+goodsId;GetGoodsDataTask task = new GetGoodsDataTask(this);task.execute(server, url, params);}class GetGoodsDataTask extends AsyncTask<String, Integer, JSONObject> {private Activity mActivity;private String mServer;public GetGoodsDataTask(Activity activity) {mActivity = activity;}/** * 处理后台执行的任务,在后台线程执行 */@Overrideprotected JSONObject doInBackground(String... params) {mServer = params[0];try {//这里面可以通过网络获取json格式的数据return new JSONObject("{\"result\":1,\"data\":{\"goods_detail\":{\"cat_id\":\"8\",\"goods_sn\":\"YL14040207\",\"goods_size\":\"S,M,L,XL,XXL XXXL\",\"shop_price\":\"102.00\",\"goods_material\":\"Polyester\",\"goods_id\":\"99999\",\"goods_name\":\"Glaring Beads O-Neck Floral Print Short Sleeve Sheath Dress\",\"goods_color\":\"Orange,Green\",\"goods_thumb\":\"images/201404/02/201404020959jsd.jpg\",\"goods_weight\":\"300.00\"},\"goods_gallery\":[{\"medium_url\":\"gallery/201404/02/m201404020959wbc.jpg\",\"thumb_url\":\"gallery/201404/02/s201404020959wbc.jpg\",\"img_original\":\"gallery/201404/02/201404020959wbc.jpg\"},{\"medium_url\":\"gallery/201404/02/m201404020959zxi.jpg\",\"thumb_url\":\"gallery/201404/02/s201404020959zxi.jpg\",\"img_original\":\"gallery/201404/02/201404020959zxi.jpg\"},{\"medium_url\":\"gallery/201404/02/m201404020959skv.jpg\",\"thumb_url\":\"gallery/201404/02/s201404020959skv.jpg\",\"img_original\":\"gallery/201404/02/201404020959skv.jpg\"},{\"medium_url\":\"gallery/201404/02/m201404020959sjr.jpg\",\"thumb_url\":\"gallery/201404/02/s201404020959sjr.jpg\",\"img_original\":\"gallery/201404/02/201404020959sjr.jpg\"},{\"medium_url\":\"gallery/201404/02/m201404020959fle.jpg\",\"thumb_url\":\"gallery/201404/02/s201404020959fle.jpg\",\"img_original\":\"gallery/201404/02/201404020959fle.jpg\"}],\"count\":1},\"msg\":\"ok\"}");} catch (Exception e) {return null;}}/** * 后台任务执行完之后被调用,在UI线程执行 */protected void onPostExecute(JSONObject jsonObject) {if (jsonObject != null) {try {int resultCode = jsonObject.getInt("result");if (1 == resultCode) {JSONObject dataObject = jsonObject.getJSONObject("data");//获取返回数目int count = dataObject.getInt("count");if (count>0) {goodsGalleryList = new ArrayList<HashMap<String, String>>();JSONObject goodsDetail = dataObject.getJSONObject("goods_detail");//获取返回新闻集合JSONArray newslist = dataObject.getJSONArray("goods_gallery");for(int i=0;i<newslist.length();i++) {JSONObject newsObject = (JSONObject)newslist.opt(i); HashMap<String, String> hashMap = new HashMap<String, String>();hashMap.put("thumb_url", mServer + "uploads/" + newsObject.getString("thumb_url"));hashMap.put("medium_url", mServer + "uploads/" + newsObject.getString("medium_url"));hashMap.put("img_original", mServer + "uploads/" + newsObject.getString("img_original"));goodsGalleryList.add(hashMap);}Gallery gallery = (Gallery) findViewById(R.id.goods_gallery);adapter = new GoodsListGalleryAdapter(mActivity, goodsGalleryList); gallery.setAdapter(adapter); gallery.setSelection(1); gallery.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { Intent intent = new Intent(); intent.putExtra("position", position); intent.putExtra("mGoodsGalleryList", goodsGalleryList); intent.setClass(getApplicationContext(), GoodsGalleryActivity.class); startActivityForResult(intent, 100); } });}else {//加上自己的业务处理}}else {//加上自己的业务处理}} catch(Exception e) {e.printStackTrace();}} else {//获取图片失败}LoadingViewHandler.dismiss();}/** * 在 doInBackground(Params...)之前被调用,在UI线程执行 */protected void onPreExecute() {LoadingViewHandler.creteProgressDialog(mActivity, "");}}class GoodsListGalleryAdapter extends BaseAdapter { private Activity activity; private ArrayList<HashMap<String, String>> data; public ImageLoader imageLoader; public GoodsListGalleryAdapter(Activity act, ArrayList<HashMap<String, String>> dat) { activity = act; data = dat; imageLoader = new ImageLoader(activity.getApplicationContext()); } public int getCount() { return data.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView vi = new ImageView(activity); HashMap<String, String> hashMap = new HashMap<String, String>(); hashMap = data.get(position); imageLoader.DisplayImage(hashMap.get("thumb_url"), vi); vi.setAdjustViewBounds(true); vi.setLayoutParams((new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT))); vi.setScaleType(ImageView.ScaleType.FIT_XY); return vi; } }}
GoodsGalleryActivity.java
package cn.android.gallery;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.HashMap;import cn.android.service.ImageLoader;import cn.android.widget.LoadingViewHandler;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.AsyncTask;import android.os.Bundle;import android.view.Display;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.view.animation.AnimationUtils;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.FrameLayout;import android.widget.Gallery;import android.widget.Gallery.LayoutParams;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.ViewSwitcher;/** * 相册展示应用程序 * @Description GoodsGalleryActivity * @File GoodsGalleryActivity.java * @Package cn.android.gallery * @Author WanTianwen * @Blog http://blog.csdn.net/WanTianwen * @Date 2014-04-13 * @Version V1.0 */public class GoodsGalleryActivity extends Activity implementsAdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {private TextView titlebarTitle;private ImageView navigationBackButton;private Gallery galleyImages;private int position;private float startX;private FrameLayout switcherFrame;private ImageSwitcher imageSwitcher;public ImageLoader imageLoader;private ArrayList<HashMap<String, String>> goodsGalleryList;private LinearLayout commonError; @SuppressWarnings("unchecked")@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.goods_gallery); WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.width = (int)(display.getWidth()); //设置宽度 getWindow().setAttributes(lp); Intent intent = getIntent(); int position = intent.getIntExtra("position", 0); goodsGalleryList = (ArrayList<HashMap<String, String>>) intent.getSerializableExtra("mGoodsGalleryList"); commonError = (LinearLayout) findViewById(R.id.common_error); titlebarTitle = (TextView) findViewById(R.id.titlebar_title); //mTitlebarTitle.setText("1/" + 5);navigationBackButton = (ImageView) findViewById(R.id.navigation_back_button);navigationBackButton.setOnClickListener(new NavigationBackButtonListener(this)); imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher); imageSwitcher.setFactory(this); imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); switcherFrame = (FrameLayout) findViewById(R.id.switcher_frame); switcherFrame.setOnTouchListener(new MSwitcherOnTouchListener(this)); galleyImages = (Gallery) findViewById(R.id.goods_gallery); galleyImages.setAdapter(new ImageAdapter(this)); galleyImages.setOnItemSelectedListener(this); galleyImages.setSelection(position); } @SuppressWarnings("rawtypes")public void onItemSelected(AdapterView parent, View v, int position, long id) {try { GetImageTask task = new GetImageTask(this);task.execute(goodsGalleryList.get(position).get("medium_url")); titlebarTitle.setText((position + 1) + " / " + goodsGalleryList.size()); imageSwitcher.setVisibility(View.VISIBLE);} catch (Exception e) {commonError.setVisibility(View.VISIBLE); imageSwitcher.setVisibility(View.GONE);} } @SuppressWarnings("rawtypes")public void onNothingSelected(AdapterView parent) { } public View makeView() { ImageView i = new ImageView(this); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); return i; } public class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c) { mContext = c; imageLoader = new ImageLoader(c); } public int getCount() { return goodsGalleryList.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView vi = new ImageView(mContext); HashMap<String, String> hashMap = new HashMap<String, String>(); hashMap = goodsGalleryList.get(position); imageLoader.DisplayImage(hashMap.get("thumb_url"), vi); vi.setAdjustViewBounds(true); vi.setLayoutParams((new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT))); vi.setScaleType(ImageView.ScaleType.FIT_XY); vi.setBackgroundResource(R.drawable.detail); return vi; } } private class NavigationBackButtonListener implements OnClickListener {private Activity activity;public NavigationBackButtonListener(Activity activity) {this.activity = activity;}@Overridepublic void onClick(View v) {activity.finish();}} private class MSwitcherOnTouchListener implements OnTouchListener { private Activity activity; public MSwitcherOnTouchListener(Activity activity) { this.activity = activity; }@Overridepublic boolean onTouch(View v, MotionEvent event) {switch(event.getAction()) {//手指按下case MotionEvent.ACTION_DOWN://记录起始坐标startX = event.getX();break;//手指抬起case MotionEvent.ACTION_UP:if(event.getX() != startX) {if(event.getX() < startX && position < goodsGalleryList.size() - 1) {position++;}if(event.getX() > startX && position > 0) {position--;}galleyImages.setSelection(position);} else {activity.finish();//单击关闭该窗口}break;}return true;} } @SuppressWarnings("unused")private OnTouchListener mSwitcherOnTouchListener = new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch(event.getAction()) {//手指按下case MotionEvent.ACTION_DOWN://记录起始坐标startX = event.getX();break;//手指抬起case MotionEvent.ACTION_UP:if(event.getX() < startX && position < goodsGalleryList.size()) {position++;}if(event.getX() > startX && position > 0) {position--;}galleyImages.setSelection(position);break;}return true;}};class GetImageTask extends AsyncTask<String, Integer, Bitmap> {private Activity mActivity;public GetImageTask(Activity activity) {mActivity = activity;}/** * 处理后台执行的任务,在后台线程执行 */@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap;try {URL picUrl = new URL(params[0]);HttpURLConnection urlConn;urlConn = (HttpURLConnection) picUrl.openConnection();urlConn.setConnectTimeout(5000);urlConn.setReadTimeout(5000);InputStream is = urlConn.getInputStream();bitmap = BitmapFactory.decodeStream(is);is.close();} catch (Exception e) {return null;}return bitmap;}/** * 在调用publishProgress之后被调用,在UI线程执行 */protected void onProgressUpdate(Integer... progress) {//mProgressBar.setProgress(progress[0]);// 更新进度条的进度}/** * 后台任务执行完之后被调用,在UI线程执行 */protected void onPostExecute(Bitmap result) {if (result != null) {Drawable drawable = new BitmapDrawable(result);imageSwitcher.setImageDrawable(drawable);} else {//获取图片网络失败}LoadingViewHandler.dismiss();}/** * 在 doInBackground(Params...)之前被调用,在UI线程执行 */protected void onPreExecute() {LoadingViewHandler.creteProgressDialog(mActivity, "");}/** * 在UI线程执行 */protected void onCancelled() {}}}
goods_detail.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout android:orientation="vertical" android:id="@id/details_layout" android:background="@color/white" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <RelativeLayout android:id="@id/detail_layout" android:background="@drawable/tab_bar_bg" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:id="@id/navigation_back_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/back_btn" android:layout_centerVertical="true" /> <ImageView android:id="@id/separator_line" android:layout_width="2.0dip" android:layout_height="wrap_content" android:src="@drawable/navigation_separator_line" android:layout_toRightOf="@id/navigation_back_button" /> <TextView android:textSize="18.0dip" android:textColor="@color/white" android:ellipsize="end" android:gravity="center" android:id="@id/detail_header_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_name" android:singleLine="true" android:layout_centerInParent="true" /> <ImageView android:id="@id/add_to_cart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/featured_productbasic_cart_btn" android:layout_alignParentRight="true" /> <TextView android:textSize="9.0sp" android:gravity="center" android:id="@id/tv_cart_count" android:background="@drawable/quantity_circle" android:paddingLeft="5.0dip" android:paddingRight="5.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="1.0dip" android:layout_marginRight="10.0dip" android:text="0" android:singleLine="true" android:layout_alignTop="@id/detail_layout" android:layout_alignRight="@id/add_to_cart" /> </RelativeLayout> <Gallery android:gravity="left" android:id="@id/goods_gallery" android:tag="mygallery" android:layout_width="fill_parent" android:layout_height="80.0dip" android:layout_marginTop="5.0dip" android:layout_marginBottom="1.0dip" android:spacing="5.0dip" android:layout_below="@id/detail_layout" /></RelativeLayout>
goods_gallery.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#90000000"><RelativeLayout android:id="@id/titlebar_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@id/navigation_back_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/back_btn" android:layout_centerVertical="true" /> <ImageView android:id="@id/navigation_separator" android:layout_width="2.0dip" android:layout_height="wrap_content" android:src="@drawable/navigation_separator_line" android:layout_toRightOf="@id/navigation_back_button" /> <TextView android:id="@id/titlebar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="12.0sp" android:layout_marginTop="9.0dip" android:layout_marginLeft="10.0dip" android:textColor="@color/white" android:text="@string/app_name"/></RelativeLayout><FrameLayout android:id="@id/switcher_frame" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageSwitcher android:id="@id/switcher" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" /><LinearLayout android:id="@id/common_error"android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center" android:visibility="gone"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/notwork_be_illogical" /> <TextView android:id="@id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/network_disconnected" android:layout_gravity="center" android:textColor="@color/white"/></LinearLayout></FrameLayout> <Gallery android:id="@id/goods_gallery" android:layout_width="fill_parent" android:layout_height="60dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:gravity="center_vertical" android:spacing="16dp" /></RelativeLayout>
loading.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/loading_layout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> </LinearLayout>
效果图
下载地址:http://download.csdn.net/detail/wantianwen/7191777
3 0
- Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
- 利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
- android Gallery实现异步加载网络图片
- android Gallery实现异步加载图片
- android图片浏览器(一)——ImageSwitcher和Gallery
- ImageSwitcher gallery 实现图片展示
- android教程之教你用Gallery+ImageSwitcher实现相册功能 (一)
- 我的Android进阶之旅------>Android之Gallery和GridView两种方式与ImageSwitcher实现带预览的和幻灯片方式的两种图片浏览器
- android 用ImageSwitcher+Gallery实现图片浏览效果
- 图像切换器(ImageSwitcher)和画廊视图(Gallery)功能和用法(图片浏览器)
- 使用ImageSwitcher和Gallery实现图片的浏览
- 使用ImageSwitcher和Gallery实现图片的浏览
- Android 控件之Gallery和ImageSwitcher图片切换器
- Android开发——ImageSwitcher和Gallery组合实现图片切换案例
- 【Android基础知识】使用Gallery和ImageSwitcher实现图片轮播效果
- 图片切换ImageSwitcher&Gallery
- android实现图片相册功能
- Android复习之切换图片ImageSwitcher&Gallery
- 解决低版本ie下li:hover不支持的问题
- -e shell
- 堆排序(未完结)
- struts2 redirectaction
- 将16进制Ascii码转换为string类型的电脑按键字符
- Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
- 利用boost 来进行xml解析
- 什么样的生活才算生活
- boost vs2102
- NoSQL数据库的基础知识
- Maven3路程(一)环境搭建
- Mathematica 9设置C编译器
- basePath 的使用
- 1013:Digital Roots