歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android圖片浏覽器

Android圖片浏覽器

日期:2017/3/1 11:12:01   编辑:Linux編程

主要實現的功能就是浏覽圖片。

用到的控件:ImageSwitcher和Gallery。

推薦閱讀:Android音樂播放器:使用Android系統自帶的數據庫 http://www.linuxidc.com/Linux/2011-10/45048.htm

這種簡單的圖片浏覽器網上有很多,我也是參考網上寫的。但是我做了一些優化:

1、網上基本都是加載進來顯示這樣的頁面:

下面的Gallery不對稱。我做了優化,加載的時候是把左邊黑色的空白也鋪上了。如下:

2、可能這個地方不算是優化,我看別人的程序都是在滑動的時候,ImageSwitcher會不斷的變化,會不會很消耗資源?(只是換個方法實現變化而已,所以算不得優化)。我改成了只有停下來,你點擊那一張,ImageSwitcher才會變化。

3、這個地方個人覺得還有有必要改一下的,我是參考了Listview的機制,實現的功能都是讓圖片無限滑動,

這個是在Adapter中這麼寫的:

  1. public int getCount()
  2. {
  3. return Integer.MAX_VALUE;
  4. }

讓它最大值是最大整數,基本上是滑不到盡頭的。

這個是很正常的功能,但是每滑動一次就會

ImageView imageview = new ImageView(mContext);

這樣會new無數了ImageView對象,完全是沒必要的。

我們可以這樣,反正是循環麼,有多少個圖片,就new多少個ImageView就行了。

這個是參考Listview的機制,Listview在往下滑動的時候,item是不斷重用的。

附上源碼:

  1. package net.blogjava.mobile;
  2. import java.util.HashMap;
  3. import Android.app.Activity;
  4. import android.content.Context;
  5. import android.content.res.TypedArray;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.view.animation.AnimationUtils;
  10. import android.widget.AdapterView;
  11. import android.widget.AdapterView.OnItemClickListener;
  12. import android.widget.BaseAdapter;
  13. import android.widget.Gallery;
  14. import android.widget.ImageSwitcher;
  15. import android.widget.ImageView;
  16. import android.widget.AdapterView.OnItemSelectedListener;
  17. import android.widget.Gallery.LayoutParams;
  18. import android.widget.ViewSwitcher.ViewFactory;
  19. public class Main extends Activity implements OnItemSelectedListener, ViewFactory, OnItemClickListener
  20. {
  21. private Gallery gallery;
  22. private ImageSwitcher imageSwitcher;
  23. private ImageAdapter imageAdapter;
  24. private int mCurrentPos = -1;// 當前的item
  25. private HashMap<Integer, ImageView> mViewMap;
  26. private int[] resIds = new int[]
  27. {R.drawable.item1 ,R.drawable.item2 ,R.drawable.item3 ,R.drawable.item4 ,R.drawable.item5 ,R.drawable.item6 ,R.drawable.item7 ,R.drawable.item8 ,R.drawable.item9 ,R.drawable.item10 ,R.drawable.item11 ,R.drawable.item12 ,R.drawable.item13 ,R.drawable.item14 ,R.drawable.item15};
  28. @Override
  29. public void onCreate(Bundle savedInstanceState)
  30. {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.main);
  33. gallery = (Gallery) findViewById(R.id.gallery);
  34. imageAdapter = new ImageAdapter(this, resIds.length);
  35. gallery.setAdapter(imageAdapter);
  36. gallery.setOnItemSelectedListener(this);
  37. gallery.setSelection(1);// 設置一加載Activity就顯示的圖片為第二張
  38. gallery.setOnItemClickListener(this);
  39. imageSwitcher = (ImageSwitcher) findViewById(R.id.imageswitcher);
  40. imageSwitcher.setFactory(this);
  41. // 設置動畫效果 淡入淡出
  42. imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
  43. imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
  44. }
  45. public class ImageAdapter extends BaseAdapter
  46. {
  47. int mGalleryItemBackground;
  48. private Context mContext;
  49. private int mCount;// 一共多少個item
  50. public ImageAdapter(Context context, int count)
  51. {
  52. mContext = context;
  53. mCount = count;
  54. mViewMap = new HashMap<Integer, ImageView>(count);
  55. TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
  56. // 設置邊框的樣式
  57. mGalleryItemBackground = typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);
  58. }
  59. public int getCount()
  60. {
  61. return Integer.MAX_VALUE;
  62. }
  63. public Object getItem(int position)
  64. {
  65. return position;
  66. }
  67. public long getItemId(int position)
  68. {
  69. return position;
  70. }
  71. public View getView(int position, View convertView, ViewGroup parent)
  72. {
  73. ImageView imageview = mViewMap.get(position % mCount);
  74. if (imageview == null)
  75. {
  76. imageview = new ImageView(mContext);
  77. imageview.setImageResource(resIds[position % resIds.length]);
  78. imageview.setScaleType(ImageView.ScaleType.FIT_XY);
  79. imageview.setLayoutParams(new Gallery.LayoutParams(136, 88));
  80. imageview.setBackgroundResource(mGalleryItemBackground);
  81. }
  82. return imageview;
  83. }
  84. }
  85. // 滑動Gallery的時候,ImageView不斷顯示當前的item
  86. @Override
  87. public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
  88. {
  89. // imageSwitcher.setImageResource(resIds[position % resIds.length]);
  90. }
  91. // 設置點擊Gallery的時候才切換到該圖片
  92. @Override
  93. public void onItemClick(AdapterView<?> parent, View view, int position, long id)
  94. {
  95. if (mCurrentPos == position)
  96. {
  97. // 如果在顯示當前圖片,再點擊,就不再加載。
  98. return;
  99. }
  100. mCurrentPos = position;
  101. imageSwitcher.setImageResource(resIds[position % resIds.length]);
  102. }
  103. @Override
  104. public void onNothingSelected(AdapterView<?> parent)
  105. {
  106. }
  107. @Override
  108. public View makeView()
  109. {
  110. ImageView imageView = new ImageView(this);
  111. imageView.setBackgroundColor(0xFF000000);
  112. imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
  113. imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  114. return imageView;
  115. }
  116. }
Copyright © Linux教程網 All Rights Reserved