2012-03-15 126 views
0

我正在使用ViewPager addon api的圖像庫上工作。我正在從SD卡中的特定文件夾加載圖像。我的目標是在ViewPager中每個屏幕只顯示9個圖像,這是我無法實現的。下面的代碼是主要活動。以視圖分頁器的網格視圖顯示圖像

public class AndroidSwipeGalleryActivity extends Activity { 

private int size; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.setContentView(R.layout.image_gallery); 

    File file = new File(Environment.getExternalStorageDirectory()+"/xxxxxxx/images"); 

    if (file.exists()) { 

     size = file.listFiles().length; 

     System.out.println("=====File exists====Length is====="+size); 

     double quo = (double)size/9; 

     System.out.println("====Dividing by 9====" + quo); 

     size = (int) Math.ceil(quo); 

     System.out.println("===Math===== "+size); 

    } else { 

     System.out.println("======File does not exists===="); 

    } 

    MyPagerAdapter adapter = new MyPagerAdapter(this); 
    adapter.setScrCount(size); 
    ViewPager myPager = (ViewPager) findViewById(R.id.viewpager); 
    myPager.setAdapter(adapter); 
    myPager.setCurrentItem(0); 

} 

}

尋呼機適配器和圖像適配器是在下面的類:

public class MyPagerAdapter extends PagerAdapter { 

private TextView tv; 

private GridView gv; 

private int scrCount; 

private int count; 

public int imageCount; 

private Cursor cursor; 

private int columnIndex; 

private Activity act; 

public MyPagerAdapter(Activity act) { 

    this.act = act; 

} 

public int getCount() { 

    return getScrCount(); 

} 

public Object instantiateItem(View collection, int position) { 

    // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    // Create the cursor pointing to the SDCard 

    String uri = MediaStore.Images.Media.DATA; 

    String condition = uri + " like '%/beverlyhills/images%'"; 

    cursor = act.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, condition, null, null); 

    count = cursor.getCount(); 

    System.out.println("Cursor count::::"+count); 

    // Get the column index of the Thumbnails Image ID 

    columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 

    // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    int resId = 0; 

    for (int i = 0; i < getScrCount() ; i++) { 

      if (count > 9) { 

       if (position == i) { 

       int num = 0; 

       num = count - 9; 

       count = num; 

       imageCount = 9; 

       } 

      } else { 

       imageCount = count; 

      } 
    } 

    resId = R.layout.number_one; 

    View view = inflater.inflate(resId, null); 

    ((ViewPager) collection).addView(view, 0); 

    tv = (TextView) collection.findViewById(R.id.swipeTitleTextView); 

    tv.setText("Swipe Gallery"); 

    gv = (GridView) collection.findViewById(R.id.galleryGridView); 

    ImageAdapter imageAdapter = new ImageAdapter(collection.getContext(), imageCount); 

    gv.setAdapter(imageAdapter); 

    // Set up a click listener 
    gv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(@SuppressWarnings("rawtypes") AdapterView parent, View v, int position, long id) { 
      // Get the data location of the image 
      String[] projection = {MediaStore.Images.Media.DATA}; 
      cursor = act.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
        projection, // Which columns to return 
        null,  // Return all rows 
        null, 
        null); 
      columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToPosition(position); 
      // Get image filename 
      String imagePath = cursor.getString(columnIndex); 
      // Use this path to do further processing, i.e. full screen display 

      System.out.println("=====Image Path:::::"+imagePath); 
     } 
    }); 

    return view; 
} 

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 

} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 

} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

@Override 
public void finishUpdate(View arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void startUpdate(View arg0) { 
    // TODO Auto-generated method stub 

} 

public int getScrCount() { 
    return scrCount; 
} 

public void setScrCount(int scrCount) { 
    this.scrCount = scrCount; 
} 


private class ImageAdapter extends BaseAdapter { 

    private int count; 

    public ImageAdapter(Context ctx, int count) { 

     this.count = count; 

    } 

    @Override 
    public int getCount() { 

     return count; 

    } 

    @Override 
    public Object getItem(int position) { 

     return position; 

    } 

    @Override 
    public long getItemId(int position) { 

     return position; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView picturesView; 
      if (convertView == null) { 
       picturesView = new ImageView(act); 
       // Move cursor to current position 
       cursor.moveToPosition(position); 
       // Get the current value for the requested column 

       int imageID = cursor.getInt(columnIndex); 

       // Set the content of the image based on the provided URI 
       picturesView.setImageURI(Uri.withAppendedPath(
         MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageID)); 
       picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       picturesView.setPadding(8, 8, 8, 8); 
       picturesView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
      } 
      else { 
       picturesView = (ImageView)convertView; 
      } 
      return picturesView; 
    } 

} 

} 

問題是我能夠加載的圖像,並在屏幕上顯示它們,但是不能夠每個屏幕精確顯示9個圖像。請仔細閱讀代碼,這並不複雜。

回答

2

我已經創建了視圖尋呼機的其他演示示例來管理頁面並加載圖像。按照步驟明智的,它完美的作品..

其尋呼機適配器和mDataHolder(圖像列表)和 設置gridview的android:numColumns="3"

private int size; 
    private int start; 
    private int end; 
    private int MATRIX = 9; 


public int getCount() { 
     int size = 0; 
     if (mDataHolder != null) 
      modular = mDataHolder.get_Listholder().size() % MATRIX; 
     if (modular != 0) 
      size++; 

     return ((mDataHolder.get_Listholder().size())/MATRIX) + size; 
    } 



    @Override 
    public Object instantiateItem(ViewGroup container, final int pageIndex) { 

     mRelativeLayoutInflater = (RelativeLayout) mMasterFragmentActivity.getLayoutInflater().inflate(R.layout.member_pager_adapter, container, false); 
     mGridView = (GridView) mRelativeLayoutInflater.findViewById(R.id.member_gridView_list); 

Calculation of pages <

 size = MATRIX; 
     start = pageIndex * MATRIX; 
     end = 0; 
     int temp = 0; 

     if ((start + MATRIX) < mDataHolder.get_Listholder().size()) { 
      end = start + MATRIX; 
     } else { 
      temp = mDataHolder.get_Listholder().size() - start; 
      end = start + temp; 
      size = temp; 
     } 
的財產

...然後將該變量傳遞給gridview適配器以在pager中設置其他內容。

 mAdapterMember = new AdapterMember(mContext, start, end, size); 
     mGridView.setAdapter(mAdapterMember); 

     ((ViewPager) container).addView(mRelativeLayoutInflater); 
     return mRelativeLayoutInflater; 
    } 

下面管理頁面變量也使用GridView的適配器設置現在的位置。 當設定頁面內容的位置要像(start + position)

private class AdapterMember extends BaseAdapter { 

    private ViewHolder mViewHolder; 
    private Context mContext; 
    private int start; 
    private int end; 
    private int size; 

    private AdapterMember(Context mContext, int start, int end, int size) { 
     this.mContext = mContext; 
     this.start = start; 
     this.end = end; 
     this.size = size; 
    } 

    @Override 
    public int getCount() { 
     if (size > 0) 
      return size; 
     else 
      return 0; 
    } 
    @Override 
    public Object getItem(int position) { 
     if (mMemberListVO.getMember().size() > 0) 
      return mMemberListVO.getMember().get(position); 
     else 
      return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      convertView = ((Activity) mContext).getLayoutInflater().inflate(R.layout.row_member_list, null); 
      mViewHolder = new ViewHolder(); 
      mViewHolder.mImageViewMemberPhoto = (NetworkImageView) convertView .findViewById(R.id.row_member_list_imageView_person); 
      mViewHolder.mTextViewMemberName = (TextView) convertView .findViewById(R.id.row_member_list_textview_person_name); 
      mViewHolder.mTextViewMemberDesignation = (TextView) convertView .findViewById(R.id.row_member_list_textview_person_designation); 
      mViewHolder.mTextViewMemberAddress = (TextView) convertView .findViewById(R.id.row_member_list_textview_person_address); 
      mViewHolder.mTextViewMemberNotification = (TextView) convertView .findViewById(R.id.row_member_list_imageview_msg_notification); 
      convertView.setTag(mViewHolder); 
     } else { 
      mViewHolder = (ViewHolder) convertView.getTag(); 
     } 


     mViewHolder.mTextViewMemberName.setText(mDataHolder.get_Listholder().get(start + position) .get(DBHelper.mFieldMember_First_Name) 
       + getString(R.string.double_quate_with_space) 
       + mDataHolder.get_Listholder(). get(start + position).get(DBHelper.mFieldMember_Last_Name)); 

     mViewHolder.mTextViewMemberDesignation.setText(mDataHolder.get_Listholder().get(start + position) 
       .get(DBHelper.mFieldMember_Occupation)); 

     mViewHolder.mTextViewMemberAddress.setText(mDataHolder.get_Listholder().get(start + position) .get(DBHelper.mFieldMember_Block_No) 
       + "," + getString(R.string.double_quate_with_space) 
       + mDataHolder.get_Listholder().get(start + position).get(DBHelper.mFieldMember_House_No) + "," 
       + getString(R.string.double_quate_with_space) 
       + mDataHolder.get_Listholder().get(start + position).get(DBHelper.mFieldMember_Home_Address) + "."); 

     return convertView; 
    } 

    private class ViewHolder { 
     private NetworkImageView mImageViewMemberPhoto; 
     private TextView mTextViewMemberName, mTextViewMemberDesignation, mTextViewMemberAddress, 
       mTextViewMemberNotification; 
    } 
} 

它完全符合您的要求的工作... 問題是解決加載圖像,並在屏幕上顯示它們的顯示每屏正好9倍的圖像。