在查看传呼机的网格视图显示图像 [英] Display images in grid view of View pager
问题描述
我正在为我所利用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屋!