利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)


Android利用Gallery和ImageSwitcher实现相册功能(异步加载图片)


MainActivity.java

  1. package cn.android.gallery;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import org.json.JSONArray;  
  6. import org.json.JSONObject;  
  7. import android.app.Activity;  
  8. import android.content.Intent;  
  9. import android.os.AsyncTask;  
  10. import android.os.Bundle;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.AdapterView;  
  14. import android.widget.AdapterView.OnItemClickListener;  
  15. import android.widget.BaseAdapter;  
  16. import android.widget.Gallery;  
  17. import android.widget.Gallery.LayoutParams;  
  18. import android.widget.ImageView;  
  19. import cn.android.service.ImageLoader;  
  20. import cn.android.widget.LoadingViewHandler;  
  21.   
  22. /** 
  23.  * 应用入口程序 
  24.  * @Description MainActivity 
  25.  
  26.  * @File MainActivity.java 
  27.  
  28.  * @Package cn.android.gallery 
  29.  
  30.  * @Author WanTianwen 
  31.  
  32.  * @Blog  http://blog.csdn.net/WanTianwen 
  33.  
  34.  * @Date 2014-04-13 
  35.  
  36.  * @Version V1.0 
  37.  */  
  38. public class MainActivity extends Activity {  
  39.     private int goodsId;  
  40.   
  41.     GoodsListGalleryAdapter adapter;   
  42.     private ArrayList<HashMap<String, String>> goodsGalleryList;  
  43.           
  44.     public void onCreate(Bundle savedInstanceState) {  
  45.         super.onCreate(savedInstanceState);  
  46.         setContentView(R.layout.goods_detail);  
  47.           
  48.         Intent intent = getIntent();  
  49.         Bundle bundle = intent.getExtras();  
  50.         goodsId = 99999;//商品ID可以通过意图传值过来  
  51.           
  52.         String server = getString(R.string.server);  
  53.         String url = server + "getGoodsDetail";  
  54.         String params = "goods_id="+goodsId;  
  55.           
  56.         GetGoodsDataTask task = new GetGoodsDataTask(this);  
  57.         task.execute(server, url, params);  
  58.     }  
  59.   
  60.     class GetGoodsDataTask extends AsyncTask<String, Integer, JSONObject> {  
  61.         private Activity mActivity;  
  62.         private String mServer;  
  63.         public GetGoodsDataTask(Activity activity) {  
  64.             mActivity = activity;  
  65.         }  
  66.         /** 
  67.          * 处理后台执行的任务,在后台线程执行 
  68.          */  
  69.         @Override  
  70.         protected JSONObject doInBackground(String... params) {  
  71.             mServer = params[0];  
  72.             try {//这里面可以通过网络获取json格式的数据  
  73.                 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\"}");  
  74.             } catch (Exception e) {  
  75.                 return null;  
  76.             }  
  77.         }  
  78.   
  79.         /** 
  80.          * 后台任务执行完之后被调用,在UI线程执行 
  81.          */  
  82.         protected void onPostExecute(JSONObject jsonObject) {  
  83.             if (jsonObject != null) {  
  84.                 try {  
  85.                     int resultCode = jsonObject.getInt("result");  
  86.                     if (1 == resultCode) {  
  87.                         JSONObject dataObject = jsonObject.getJSONObject("data");  
  88.                         //获取返回数目  
  89.                         int count = dataObject.getInt("count");  
  90.                         if (count>0) {  
  91.                             goodsGalleryList = new ArrayList<HashMap<String, String>>();  
  92.                               
  93.                             JSONObject goodsDetail = dataObject.getJSONObject("goods_detail");  
  94.                               
  95.                             //获取返回新闻集合  
  96.                             JSONArray newslist = dataObject.getJSONArray("goods_gallery");  
  97.                             for(int i=0;i<newslist.length();i++) {  
  98.                                   
  99.                                 JSONObject newsObject = (JSONObject)newslist.opt(i);   
  100.                                 HashMap<String, String> hashMap = new HashMap<String, String>();  
  101.                                 hashMap.put("thumb_url", mServer + "uploads/" + newsObject.getString("thumb_url"));  
  102.                                 hashMap.put("medium_url", mServer + "uploads/" + newsObject.getString("medium_url"));  
  103.                                 hashMap.put("img_original", mServer + "uploads/" + newsObject.getString("img_original"));  
  104.                                 goodsGalleryList.add(hashMap);  
  105.                             }  
  106.                               
  107.                               
  108.                             Gallery gallery = (Gallery) findViewById(R.id.goods_gallery);  
  109.                             adapter = new GoodsListGalleryAdapter(mActivity, goodsGalleryList);            
  110.                             gallery.setAdapter(adapter);   
  111.                             gallery.setSelection(1);  
  112.                               
  113.                             gallery.setOnItemClickListener(new OnItemClickListener() {  
  114.                                 public void onItemClick(AdapterView parent, View v, int position, long id) {  
  115.                                     Intent intent = new Intent();  
  116.                                     intent.putExtra("position", position);  
  117.                                     intent.putExtra("mGoodsGalleryList", goodsGalleryList);  
  118.                                     intent.setClass(getApplicationContext(), GoodsGalleryActivity.class);  
  119.                                     startActivityForResult(intent, 100);  
  120.                                 }  
  121.                             });  
  122.                         }  
  123.                         else {  
  124.                             //加上自己的业务处理  
  125.                         }  
  126.                     }  
  127.                     else {  
  128.                         //加上自己的业务处理  
  129.                     }  
  130.                 } catch(Exception e) {  
  131.                     e.printStackTrace();  
  132.                 }  
  133.                   
  134.             } else {  
  135.                 //获取图片失败  
  136.             }  
  137.             LoadingViewHandler.dismiss();  
  138.         }  
  139.   
  140.         /** 
  141.          * 在 doInBackground(Params...)之前被调用,在UI线程执行 
  142.          */  
  143.         protected void onPreExecute() {  
  144.             LoadingViewHandler.creteProgressDialog(mActivity, "");  
  145.         }  
  146.     }  
  147.       
  148.     class GoodsListGalleryAdapter extends BaseAdapter {    
  149.         private Activity activity;    
  150.         private ArrayList<HashMap<String, String>> data;    
  151.         public ImageLoader imageLoader;  
  152.             
  153.         public GoodsListGalleryAdapter(Activity act, ArrayList<HashMap<String, String>> dat) {   
  154.             activity = act;    
  155.             data = dat;   
  156.             imageLoader = new ImageLoader(activity.getApplicationContext());    
  157.         }    
  158.         
  159.         public int getCount() {    
  160.             return data.size();    
  161.         }    
  162.         
  163.         public Object getItem(int position) {    
  164.             return position;    
  165.         }    
  166.         
  167.         public long getItemId(int position) {    
  168.             return position;    
  169.         }    
  170.             
  171.         public View getView(int position, View convertView, ViewGroup parent) {    
  172.             ImageView vi = new ImageView(activity);  
  173.             HashMap<String, String> hashMap = new HashMap<String, String>();  
  174.             hashMap = data.get(position);  
  175.             imageLoader.DisplayImage(hashMap.get("thumb_url"), vi);  
  176.   
  177.             vi.setAdjustViewBounds(true);  
  178.             vi.setLayoutParams((new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)));  
  179.             vi.setScaleType(ImageView.ScaleType.FIT_XY);  
  180.             return vi;    
  181.         }    
  182.     }  
  183. }  


GoodsGalleryActivity.java
  1. package cn.android.gallery;  
  2. import java.io.InputStream;  
  3. import java.net.HttpURLConnection;  
  4. import java.net.URL;  
  5. import java.util.ArrayList;  
  6. import java.util.HashMap;  
  7. import cn.android.service.ImageLoader;  
  8. import cn.android.widget.LoadingViewHandler;  
  9. import android.app.Activity;  
  10. import android.content.Context;  
  11. import android.content.Intent;  
  12. import android.graphics.Bitmap;  
  13. import android.graphics.BitmapFactory;  
  14. import android.graphics.drawable.BitmapDrawable;  
  15. import android.graphics.drawable.Drawable;  
  16. import android.os.AsyncTask;  
  17. import android.os.Bundle;  
  18. import android.view.Display;  
  19. import android.view.MotionEvent;  
  20. import android.view.View;  
  21. import android.view.View.OnClickListener;  
  22. import android.view.View.OnTouchListener;  
  23. import android.view.ViewGroup;  
  24. import android.view.Window;  
  25. import android.view.WindowManager;  
  26. import android.view.animation.AnimationUtils;  
  27. import android.widget.AdapterView;  
  28. import android.widget.BaseAdapter;  
  29. import android.widget.FrameLayout;  
  30. import android.widget.Gallery;  
  31. import android.widget.Gallery.LayoutParams;  
  32. import android.widget.ImageSwitcher;  
  33. import android.widget.ImageView;  
  34. import android.widget.LinearLayout;  
  35. import android.widget.TextView;  
  36. import android.widget.ViewSwitcher;  
  37.   
  38. /** 
  39.  * 相册展示应用程序 
  40.  * @Description GoodsGalleryActivity 
  41.  
  42.  * @File GoodsGalleryActivity.java 
  43.  
  44.  * @Package cn.android.gallery 
  45.  
  46.  * @Author WanTianwen 
  47.  
  48.  * @Blog  http://blog.csdn.net/WanTianwen 
  49.  
  50.  * @Date 2014-04-13 
  51.  
  52.  * @Version V1.0 
  53.  */  
  54. public class GoodsGalleryActivity  extends Activity implements  
  55. AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {  
  56.     private TextView titlebarTitle;  
  57.     private ImageView navigationBackButton;  
  58.     private Gallery galleyImages;  
  59.     private int position;  
  60.     private float startX;  
  61.     private FrameLayout switcherFrame;  
  62.     private ImageSwitcher imageSwitcher;  
  63.     public ImageLoader imageLoader;  
  64.     private ArrayList<HashMap<String, String>> goodsGalleryList;  
  65.     private LinearLayout commonError;  
  66.       
  67.     @SuppressWarnings("unchecked")  
  68.     @Override  
  69.     public void onCreate(Bundle savedInstanceState) {  
  70.         super.onCreate(savedInstanceState);  
  71.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  72.         setContentView(R.layout.goods_gallery);  
  73.         WindowManager windowManager = getWindowManager();  
  74.         Display display = windowManager.getDefaultDisplay();  
  75.         WindowManager.LayoutParams lp = getWindow().getAttributes();  
  76.         lp.width = (int)(display.getWidth()); //设置宽度  
  77.         getWindow().setAttributes(lp);  
  78.   
  79.           
  80.         Intent intent = getIntent();  
  81.         int position = intent.getIntExtra("position"0);  
  82.         goodsGalleryList = (ArrayList<HashMap<String, String>>) intent.getSerializableExtra("mGoodsGalleryList");  
  83.           
  84.         commonError = (LinearLayout) findViewById(R.id.common_error);  
  85.           
  86.         titlebarTitle = (TextView) findViewById(R.id.titlebar_title);  
  87.         //mTitlebarTitle.setText("1/" + 5);  
  88.         navigationBackButton = (ImageView) findViewById(R.id.navigation_back_button);  
  89.         navigationBackButton.setOnClickListener(new NavigationBackButtonListener(this));  
  90.           
  91.         imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher);  
  92.         imageSwitcher.setFactory(this);  
  93.         imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,  
  94.                 android.R.anim.fade_in));  
  95.         imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,  
  96.                 android.R.anim.fade_out));  
  97.         switcherFrame = (FrameLayout) findViewById(R.id.switcher_frame);  
  98.         switcherFrame.setOnTouchListener(new MSwitcherOnTouchListener(this));  
  99.   
  100.         galleyImages = (Gallery) findViewById(R.id.goods_gallery);  
  101.         galleyImages.setAdapter(new ImageAdapter(this));  
  102.         galleyImages.setOnItemSelectedListener(this);  
  103.         galleyImages.setSelection(position);  
  104.     }  
  105.   
  106.     @SuppressWarnings("rawtypes")  
  107.     public void onItemSelected(AdapterView parent, View v, int position, long id) {  
  108.         try {  
  109.             GetImageTask task = new GetImageTask(this);  
  110.             task.execute(goodsGalleryList.get(position).get("medium_url"));  
  111.             titlebarTitle.setText((position + 1) + " / " + goodsGalleryList.size());  
  112.             imageSwitcher.setVisibility(View.VISIBLE);  
  113.         } catch (Exception e) {  
  114.             commonError.setVisibility(View.VISIBLE);  
  115.             imageSwitcher.setVisibility(View.GONE);  
  116.         }    
  117.     }  
  118.   
  119.     @SuppressWarnings("rawtypes")  
  120.     public void onNothingSelected(AdapterView parent) {  
  121.     }  
  122.   
  123.     public View makeView() {  
  124.         ImageView i = new ImageView(this);  
  125.         i.setScaleType(ImageView.ScaleType.FIT_CENTER);  
  126.         i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,  
  127.                 LayoutParams.FILL_PARENT));  
  128.         return i;  
  129.     }  
  130.   
  131.     public class ImageAdapter extends BaseAdapter {  
  132.         private Context mContext;  
  133.         public ImageAdapter(Context c) {  
  134.             mContext = c;  
  135.             imageLoader = new ImageLoader(c);  
  136.         }  
  137.   
  138.         public int getCount() {  
  139.             return goodsGalleryList.size();  
  140.         }  
  141.   
  142.         public Object getItem(int position) {  
  143.             return position;  
  144.         }  
  145.   
  146.         public long getItemId(int position) {  
  147.             return position;  
  148.         }  
  149.   
  150.         public View getView(int position, View convertView, ViewGroup parent) {  
  151.             ImageView vi = new ImageView(mContext);  
  152.             HashMap<String, String> hashMap = new HashMap<String, String>();  
  153.             hashMap = goodsGalleryList.get(position);  
  154.             imageLoader.DisplayImage(hashMap.get("thumb_url"), vi);  
  155.             vi.setAdjustViewBounds(true);  
  156.             vi.setLayoutParams((new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)));  
  157.             vi.setScaleType(ImageView.ScaleType.FIT_XY);  
  158.             vi.setBackgroundResource(R.drawable.detail);  
  159.             return vi;   
  160.         }  
  161.     }  
  162.   
  163.     private class NavigationBackButtonListener implements OnClickListener {  
  164.         private Activity activity;  
  165.         public NavigationBackButtonListener(Activity activity) {  
  166.             this.activity = activity;  
  167.         }  
  168.         @Override  
  169.         public void onClick(View v) {  
  170.             activity.finish();  
  171.         }  
  172.     }  
  173.     private class MSwitcherOnTouchListener implements OnTouchListener {  
  174.         private Activity activity;  
  175.         public MSwitcherOnTouchListener(Activity activity) {  
  176.             this.activity = activity;  
  177.         }  
  178.   
  179.         @Override  
  180.         public boolean onTouch(View v, MotionEvent event) {  
  181.             switch(event.getAction()) {  
  182.             //手指按下  
  183.             case MotionEvent.ACTION_DOWN:  
  184.                 //记录起始坐标  
  185.                 startX = event.getX();  
  186.                 break;  
  187.             //手指抬起  
  188.             case MotionEvent.ACTION_UP:  
  189.                 if(event.getX() != startX) {  
  190.                     if(event.getX() < startX && position < goodsGalleryList.size() - 1) {  
  191.                         position++;  
  192.                     }  
  193.                     if(event.getX() > startX && position > 0) {  
  194.                         position--;  
  195.                     }  
  196.                     galleyImages.setSelection(position);  
  197.                 } else {  
  198.                     activity.finish();//单击关闭该窗口  
  199.                 }  
  200.                 break;  
  201.             }  
  202.             return true;  
  203.         }  
  204.           
  205.     }  
  206.       
  207.     @SuppressWarnings("unused")  
  208.     private OnTouchListener mSwitcherOnTouchListener = new OnTouchListener() {  
  209.         @Override  
  210.         public boolean onTouch(View v, MotionEvent event) {  
  211.             switch(event.getAction()) {  
  212.             //手指按下  
  213.             case MotionEvent.ACTION_DOWN:  
  214.                 //记录起始坐标  
  215.                 startX = event.getX();  
  216.                 break;  
  217.             //手指抬起  
  218.             case MotionEvent.ACTION_UP:  
  219.                 if(event.getX() < startX && position < goodsGalleryList.size()) {  
  220.                     position++;  
  221.                 }  
  222.                 if(event.getX() > startX && position > 0) {  
  223.                     position--;  
  224.                 }  
  225.                 galleyImages.setSelection(position);  
  226.                 break;  
  227.             }  
  228.             return true;  
  229.         }  
  230.     };  
  231.       
  232.       
  233.     class GetImageTask extends AsyncTask<String, Integer, Bitmap> {  
  234.         private Activity mActivity;  
  235.         public GetImageTask(Activity activity) {  
  236.             mActivity = activity;  
  237.         }  
  238.         /** 
  239.          * 处理后台执行的任务,在后台线程执行 
  240.          */  
  241.         @Override  
  242.         protected Bitmap doInBackground(String... params) {  
  243.             Bitmap bitmap;  
  244.             try {  
  245.                 URL picUrl = new URL(params[0]);  
  246.                 HttpURLConnection urlConn;  
  247.                 urlConn = (HttpURLConnection) picUrl.openConnection();  
  248.                 urlConn.setConnectTimeout(5000);  
  249.                 urlConn.setReadTimeout(5000);  
  250.                 InputStream is = urlConn.getInputStream();  
  251.                 bitmap = BitmapFactory.decodeStream(is);  
  252.                 is.close();  
  253.             } catch (Exception e) {  
  254.                 return null;  
  255.             }  
  256.             return bitmap;  
  257.         }  
  258.   
  259.         /** 
  260.          * 在调用publishProgress之后被调用,在UI线程执行 
  261.          */  
  262.         protected void onProgressUpdate(Integer... progress) {  
  263.             //mProgressBar.setProgress(progress[0]);// 更新进度条的进度  
  264.         }  
  265.   
  266.         /** 
  267.          * 后台任务执行完之后被调用,在UI线程执行 
  268.          */  
  269.         protected void onPostExecute(Bitmap result) {  
  270.             if (result != null) {  
  271.                 Drawable drawable = new BitmapDrawable(result);  
  272.                 imageSwitcher.setImageDrawable(drawable);  
  273.             } else {  
  274.                 //获取图片网络失败  
  275.             }  
  276.             LoadingViewHandler.dismiss();  
  277.         }  
  278.   
  279.         /** 
  280.          * 在 doInBackground(Params...)之前被调用,在UI线程执行 
  281.          */  
  282.         protected void onPreExecute() {  
  283.             LoadingViewHandler.creteProgressDialog(mActivity, "");  
  284.         }  
  285.   
  286.         /** 
  287.          * 在UI线程执行 
  288.          */  
  289.         protected void onCancelled() {  
  290.         }  
  291.     }  
  292. }  

goods_detail.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout android:orientation="vertical" android:id="@id/details_layout" android:background="@color/white" android:layout_width="fill_parent" android:layout_height="fill_parent"  
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.     <RelativeLayout android:id="@id/detail_layout" android:background="@drawable/tab_bar_bg" android:layout_width="fill_parent" android:layout_height="wrap_content">  
  5.         <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" />  
  6.         <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" />  
  7.         <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" />  
  8.         <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" />  
  9.         <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" />  
  10.     </RelativeLayout>  
  11.     <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" />  
  12. </RelativeLayout>  

goods_gallery.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@id/main_layout"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:orientation="vertical"  
  7.     android:background="#90000000">  
  8.     <RelativeLayout   
  9.             android:id="@id/titlebar_layout"  
  10.             android:layout_width="match_parent"  
  11.             android:layout_height="wrap_content">  
  12.         <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" />  
  13.         <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" />  
  14.         <TextView   
  15.             android:id="@id/titlebar_title"  
  16.             android:layout_width="wrap_content"  
  17.             android:layout_height="wrap_content"  
  18.             android:layout_centerInParent="true"  
  19.             android:textSize="12.0sp"  
  20.             android:layout_marginTop="9.0dip"  
  21.             android:layout_marginLeft="10.0dip"  
  22.             android:textColor="@color/white"  
  23.             android:text="@string/app_name"/>  
  24.     </RelativeLayout>  
  25.     <FrameLayout  
  26.         android:id="@id/switcher_frame"  
  27.         android:layout_width="fill_parent"  
  28.         android:layout_height="fill_parent">  
  29.         <ImageSwitcher  
  30.             android:id="@id/switcher"  
  31.             android:layout_width="match_parent"  
  32.             android:layout_height="match_parent"  
  33.             android:layout_gravity="center" />  
  34.         <LinearLayout  
  35.             android:id="@id/common_error"  
  36.             android:layout_width="wrap_content"  
  37.             android:layout_height="wrap_content"  
  38.             android:orientation="vertical"  
  39.             android:layout_gravity="center"  
  40.             android:visibility="gone">  
  41.             <ImageView   
  42.                 android:layout_width="wrap_content"  
  43.                 android:layout_height="wrap_content"  
  44.                 android:layout_gravity="center"  
  45.                 android:src="@drawable/notwork_be_illogical" />  
  46.             <TextView   
  47.                 android:id="@id/message"  
  48.                 android:layout_width="wrap_content"  
  49.                 android:layout_height="wrap_content"  
  50.                 android:text="@string/network_disconnected"  
  51.                 android:layout_gravity="center"  
  52.                 android:textColor="@color/white"/>  
  53.         </LinearLayout>  
  54.     </FrameLayout>  
  55.   
  56.     <Gallery  
  57.         android:id="@id/goods_gallery"  
  58.         android:layout_width="fill_parent"  
  59.         android:layout_height="60dp"  
  60.         android:layout_alignParentBottom="true"  
  61.         android:layout_alignParentLeft="true"  
  62.         android:gravity="center_vertical"  
  63.         android:spacing="16dp" />  
  64. </RelativeLayout>  

loading.xml
  1. <?xml version="1.0" encoding="utf-8"?>     
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
  3.     android:id="@id/loading_layout"  
  4.     android:orientation="vertical"    
  5.     android:layout_width="fill_parent"    
  6.     android:layout_height="fill_parent">     
  7. </LinearLayout>  

效果图





下载地址: http://download.csdn.net/detail/wantianwen/7191777
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值