在查看传呼机的网格视图显示图像 [英] Display images in grid view of View pager

查看:140
本文介绍了在查看传呼机的网格视图显示图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我所利用ViewPager插件API的图片库。我加载从一个特定的文件夹图像的SD卡。我的目标是在ViewPager,这我不能够实现,以显示每屏只有9图像。下面code是在MainActivity。

 公共类AndroidSwipeGalleryActivity延伸活动{私人诠释的大小;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.image_gallery);    档案文件=新的文件(Environment.getExternalStorageDirectory()+/ XXXXXXX /图像);    如果(file.exists()){        。大小= file.listFiles()长;        的System.out.println(=====文件存在====长度为=====+大小);        双现状=(双)尺寸/ 9;        的System.out.println(+现状==== 9 ====分界);        大小=(INT)Math.ceil(现状);        的System.out.println(===数学=====+大小);    }其他{        的System.out.println(======文件不存在====);    }    MyPagerAdapter适配器=新MyPagerAdapter(本);
    adapter.setScrCount(大小);
    ViewPager myPager =(ViewPager)findViewById(R.id.viewpager);
    myPager.setAdapter(适配器);
    myPager.setCurrentItem(0);}

}

寻呼机适配器和图像接口都在下面的类:

 公共类MyPagerAdapter扩展PagerAdapter {私人TextView的电视;私人的GridView GV;私人诠释scrCount;私人诠释计数;公众诠释imageCount;私人光标指针;私人诠释参数:columnIndex;私人活动的行为;公共MyPagerAdapter(活动行为){    this.act =行为;}公众诠释的getCount(){    返回getScrCount();}公共对象instantiateItem(查看收集,INT位置){    // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    //创建光标指向SD卡    字符串URI = MediaStore.Images.Media.DATA;    字符串条件= URI +LIKE'%/贝弗利山/图像%';    光标= act.getContentResolver()查询(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,空,条件,NULL,NULL);    数= cursor.getCount();    的System.out.println(光标数::::+计数);    //获取缩略图图片ID列索引    参数:columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);    // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    LayoutInflater吹气=(LayoutInflater)collection.getContext()getSystemService(Context.LAYOUT_INFLATER_SERVICE)。    INT渣油= 0;    的for(int i = 0; I< getScrCount();我++){            如果(计数> 9){                如果(位置== I){                INT NUM = 0;                NUM =计数 -  9;                数= NUM​​;                imageCount = 9;                }            }其他{                imageCount =计数;            }
    }    渣油= R.layout.number_one;    查看查看= inflater.inflate(渣油,NULL);    ((ViewPager)集合).addView(查看,0);    电视=(TextView中)collection.findViewById(R.id.swipeTitleTextView);    tv.setText(滑动图库);    GV =(GridView控件)collection.findViewById(R.id.galleryGridView);    ImageAdapter imageAdapter =新ImageAdapter(collection.getContext(),imageCount);    gv.setAdapter(imageAdapter);     //设置一个点击监听器
    gv.setOnItemClickListener(新OnItemClickListener(){
        公共无效onItemClick(@燮pressWarnings(rawtypes)适配器视图父母,视图V,INT位置,长的id){
            //获取图像的数据位置
            的String [] =投影{MediaStore.Images.Media.DATA};
            光标= act.managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    投影,//哪些列返回
                    空,//返回所有行
                    空值,
                    空值);
            参数:columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToPosition(位置);
            //获取图像文件名
            字符串的ImagePath = cursor.getString(参数:columnIndex);
            //使用这个路径做进一步的处理,即全屏显示            的System.out.println(=====图像路径:::::+的ImagePath);
        }
    });    返回视图。
}@覆盖
公共无效destroyItem(查看为arg0,ARG1 INT,对象ARG2){
    ((ViewPager)为arg0).removeView((查看)ARG2);}@覆盖
公共布尔isViewFromObject(查看为arg0,ARG1对象){
    返回将arg0 ==((查看)ARG1);}@覆盖
公共Parcelable saveState和(){
    返回null;
}@覆盖
公共无效finishUpdate(查看为arg0){
    // TODO自动生成方法存根}@覆盖
公共无效restoreState(Parcelable为arg0,ARG1的ClassLoader){
    // TODO自动生成方法存根}@覆盖
公共无效startUpdate(查看为arg0){
    // TODO自动生成方法存根}公众诠释getScrCount(){
    返回scrCount;
}公共无效setScrCount(INT scrCount){
    this.scrCount = scrCount;
}
私有类ImageAdapter延伸BaseAdapter {    私人诠释计数;    公共ImageAdapter(上下文CTX,诠释计数){        this.count =计数;    }    @覆盖
    公众诠释的getCount(){        返回计数;    }    @覆盖
    公共对象的getItem(INT位置){        返回的位置;    }    @覆盖
    众长getItemId(INT位置){        返回的位置;    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
          ImageView的picturesView;
          如果(convertView == NULL){
              picturesView =新ImageView的(行为);
              //将光标移动到当前位置
              cursor.moveToPosition(位置);
              //获取被请求的列的当前值              INT imageID = cursor.getInt(参数:columnIndex);              //设置基于所提供的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(新GridView.LayoutParams(100,100));
          }
          其他{
              picturesView =(ImageView的)convertView;
          }
          返回picturesView;
    }}

}

问题是我能加载图像,并在屏幕上显示出来,但无法显示每屏正好9图像。请通过code,它不是虽然复杂,如果任何机构都知道如何做到这一点请大家帮我,先谢谢了。


解决方案

我已创建视图寻呼机的其他演示的例子来管理页面,并加载图像。按照步骤明智的,它完美的作品。

其寻呼机适配器和mDataHolder(图像列表)和
设置GridView控件的属性的android:为numColumns =3

 私人诠释的大小;
    私人诠释启动;
    私人诠释结束;
    私人INT MATRIX = 9;
公众诠释的getCount(){
        INT大小= 0;
        如果(mDataHolder!= NULL)
            模块化= mDataHolder.get_Listholder()尺寸()%MATRIX。
        如果(模块化!= 0)
            大小++;        返回((mDataHolder.get_Listholder()大小())/ MATRIX)+大小;
    }    @覆盖
    公共对象instantiateItem(ViewGroup中的容器,最终诠释的PageIndex){        mRelativeLayoutInflater =(RelativeLayout的)mMasterFragmentActivity.getLayoutInflater()膨胀(R.layout.member_pager_adapter,集装箱,假的)。
        mGridView =(GridView控件)mRelativeLayoutInflater.findViewById(R.id.member_gridView_list);

页计算<

 尺寸=矩阵;
        开始= PageIndex的*矩阵;
        结束= 0;
        INT温度= 0;        如果((+开始MATRIX)LT; mDataHolder.get_Listholder()大小()){
            最终=启动+矩阵;
        }其他{
            。TEMP = mDataHolder.get_Listholder()尺寸() - 启动;
            最终=启动+温度;
            大小=温度;
        }


  

...然后传递变量的GridView适配器设置寻呼机等内容。


  mAdapterMember =新AdapterMember(mContext,开始,结束,大小);
        mGridView.setAdapter(mAdapterMember);        ((ViewPager)容器).addView(mRelativeLayoutInflater);
        返回mRelativeLayoutInflater;
    }

下面管理页面变量也使用GridView的适配器设置现在的位置。
当设定页面内容的位置要像(+启动位置)

 私有类AdapterMember延伸BaseAdapter {    私人ViewHolder mViewHolder;
    私人语境mContext;
    私人诠释启动;
    私人诠释结束;
    私人诠释的大小;    私人AdapterMember(上下文mContext,诠释开始,诠释年底,INT大小){
        this.mContext = mContext;
        this.start =启动;
        this.end =结束;
        this.size =大小;
    }    @覆盖
    公众诠释的getCount(){
        如果(大小大于0)
            返回的大小;
        其他
            返回0;
    }
    @覆盖
    公共对象的getItem(INT位置){
        如果(mMemberListVO.getMember()大小()方式> 0)
            返回mMemberListVO.getMember()获得(位置)。
        其他
            返回的位置;
    }    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){        如果(convertView == NULL){
            。convertView =((活动)mContext).getLayoutInflater()膨胀(R.layout.row_member_list,NULL);
            mViewHolder =新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);
        }其他{
            mViewHolder =(ViewHolder)convertView.getTag();
        }
         mViewHolder.mTextViewMemberName.setText(mDataHolder.get_Listholder()得到(+启动位置)获得(DBHelper.mFieldMember_First_Name)
                +的getString(R.string.double_quate_with_space)
                + mDataHolder.get_Listholder()。得到(+启动位置)获得(DBHelper.mFieldMember_Last_Name));        mViewHolder.mTextViewMemberDesignation.setText(mDataHolder.get_Listholder()得到(+启动位置)
                获得(DBHelper.mFieldMember_Occupation));        mViewHolder.mTextViewMemberAddress.setText(mDataHolder.get_Listholder()得到(+启动位置)获得(DBHelper.mFieldMember_Block_No)
                +,+的getString(R.string.double_quate_with_space)
                + mDataHolder.get_Listholder()得到(+启动位置)获得(DBHelper.mFieldMember_House_No)+,
                +的getString(R.string.double_quate_with_space)
                + mDataHolder.get_Listholder()获取(+启动位置)获得(DBHelper.mFieldMember_Home_Address)+)。;        返回convertView;
    }    私有类ViewHolder {
        私人NetworkImageView mImageViewMemberPhoto;
        私人TextView的mTextViewMemberName,mTextViewMemberDesignation,mTextViewMemberAddress,
                mTextViewMemberNotification;
    }
}

它完全符合您的要求工作...
问题是解决加载图像并在屏幕上显示它们的准确显示每屏9的图像。

I am working on image gallery for which i have made use of ViewPager addon api. I am loading images from a specific folder in sdcard. My goal is to display only 9 images per screen in ViewPager, which i am not able to achieve. The below code is the mainactivity.

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);

}

}

The Pager Adapter and Image adapter are in the below class:

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;
    }

}

}

The problem is i am able to load the images and display them on screen but not able to display exactly 9 images per screen. Please go through the code, its not complex though, if any body knows how to do it please help me out, Thanks in advance.

解决方案

i have create the other demo example of view pager to manage the page and also load images. follow the steps wise, its perfectly works..

its a Pager adapter and mDataHolder(List of images) and Set the property of 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;
        }

... and then pass the variable to gridview adapter to set other content in pager.

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

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

Below Manage pages variables also use the Gridview adapter to set the postion. when the set page content position to be like (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;
    }
}

its perfectly Working with your requirement... The problem is solve to load the images and display them on screen its display exactly 9 images per screen.

这篇关于在查看传呼机的网格视图显示图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆