Android 在视图寻呼机的网格视图中显示图像
我正在使用ViewPager插件api制作图像库。我正在从SD卡中的特定文件夹加载图像。我的目标是在ViewPager中每个屏幕只显示9个图像,这是我无法实现的。以下代码是主要活动Android 在视图寻呼机的网格视图中显示图像,android,image,gridview,android-viewpager,Android,Image,Gridview,Android Viewpager,我正在使用ViewPager插件api制作图像库。我正在从SD卡中的特定文件夹加载图像。我的目标是在ViewPager中每个屏幕只显示9个图像,这是我无法实现的。以下代码是主要活动 public class AndroidSwipeGalleryActivity extends Activity { private int size; @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea
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;
}
}
}
公共类MyPagerAdapter扩展了PagerAdapter{
私家图文电视;
私有网格视图gv;
私人国际帐户;
私人整数计数;
公共int图像计数;
私有游标;
私有索引;
私人活动法;
公共MyPagerAdapter(活动法){
this.act=act;
}
public int getCount(){
返回getScrCount();
}
公共对象实例化项(视图集合,int位置){
// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//创建指向SD卡的光标
字符串uri=MediaStore.Images.Media.DATA;
字符串条件=uri+“类似于“%/beverlyhills/images%”;
cursor=act.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,condition,null,null);
count=cursor.getCount();
System.out.println(“光标计数:”+count);
//获取缩略图图像ID的列索引
columnIndex=cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.\u ID);
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
LayoutFlater充气器=(LayoutFlater)collection.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
int剩余=0;
对于(int i=0;i9){
如果(位置==i){
int num=0;
num=计数-9;
计数=num;
图像计数=9;
}
}否则{
imageCount=计数;
}
}
剩余=R.layout.number_-one;
视图=充气机。充气(剩余,空);
((ViewPager)集合).addView(视图,0);
tv=(TextView)collection.findViewById(R.id.swipitletextView);
tv.setText(“滑动画廊”);
gv=(GridView)collection.findViewById(R.id.galleryGridView);
ImageAdapter ImageAdapter=新的ImageAdapter(collection.getContext(),imageCount);
gv.设置适配器(图像适配器);
//设置单击侦听器
gv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(@SuppressWarnings(“rawtypes”)AdapterView父级、视图v、整型位置、长id){
//获取图像的数据位置
字符串[]投影={MediaStore.Images.Media.DATA};
游标=act.managedQuery(MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,
投影,//返回哪些列
null,//返回所有行
无效的
无效);
columnIndex=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
光标。移动位置(位置);
//获取图像文件名
String imagePath=cursor.getString(columnIndex);
//使用此路径进行进一步处理,即全屏显示
System.out.println(“==Image-Path:::”+imagePath);
}
});
返回视图;
}
@凌驾
公共项目(视图arg0、整数arg1、对象arg2){
((视图寻呼机)arg0.removeView((视图)arg2);
}
@凌驾
公共布尔值isViewFromObject(视图arg0,对象arg1){
返回arg0==((视图)arg1);
}
@凌驾
公共包裹存储状态(){
返回null;
}
@凌驾
public void finishUpdate(视图arg0){
//TODO自动生成的方法存根
}
@凌驾
公共地产(地块arg0,类加载器arg1){
//TODO自动生成的方法存根
}
@凌驾
公共作废启动日期(视图arg0){
//TODO自动生成的方法存根
}
public int getScrCount(){
返回scrCount;
}
公共无效设置计数(整数计数){
this.scrCount=scrCount;
}
私有类ImageAdapter扩展了BaseAdapter{
私人整数计数;
公共图像适配器(上下文ctx,整数计数){
this.count=计数;
}
@凌驾
public int getCount(){
返回计数;
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图片视图;
if(convertView==null){
picturesView=新图像视图(act);
//将光标移动到当前位置
光标。移动位置(位置);
//获取请求列的当前值
int imageID=cursor.getInt(columnIndex);
//根据提供的URI设置图像的内容
picturesView.setImageURI(Uri.withAppendedPath(
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,“+imageID”);
picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
设置填充(8,8,8,8);
picturesView.setLayoutParams(新的GridView.LayoutParams(100100));
}
否则{
picturesView=(ImageView)convertView;
}
返回图片视图;
}
}
}
问题是我能够加载图像并在屏幕上显示它们,但不能在每个屏幕上显示9个图像。请仔细阅读代码,它并不复杂。我创建了另一个查看页面的演示示例,用于管理页面和加载图像。明智地遵循这些步骤,它是完美的 它是一个寻呼机适配器和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);
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;
}
mAdapterMember = new AdapterMember(mContext, start, end, size);
mGridView.setAdapter(mAdapterMember);
((ViewPager) container).addView(mRelativeLayoutInflater);
return mRelativeLayoutInflater;
}
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;
}
}