0

だから、私は多くの人がアンドロイド用に2列のギャラリーを作成するために戦ってきたのが好きです。

これまでのところ、私の解決策は、それぞれに写真のスポットがある2つのテーブル行を持つベースアダプター呼び出しレイアウトを作成し、ベースアダプターに1つの画像を配置してから、カーソルを次の位置に移動して、別の画像を2番目のプレースホルダー..これまでのところ、画像が繰り返されることを受け入れています。最初のパスにimage1とimage 2を配置し、次のパスでimage3の上にimage2を配置します。設定する方法があります。ベースアダプタが呼び出される増分は?

以下の修正されたコード

public class GallAdapter extends BaseAdapter {
        public Cursor cursor;
        private int columnIndex;
        private Context context;
        int imageBackground;
        String url;
        Uri uri;
        int originalImageId;
        int imageID;
        int columnData;
        ViewGroup myp;
        ImageView d;
        ImageView d2;
        Boolean done = false;

        public GallAdapter(Context ctx, Cursor cur, int cIn ) {
            context = ctx;
            columnIndex = cIn;

            cursor = cur;

        }

        @Override
        public int getCount() {
            Toast.makeText(context, "old:"+cursor.getCount()+" 1/2:"+cursor.getCount()/2+" roundedup:"+Math.ceil((float)cursor.getCount()/2), Toast.LENGTH_SHORT).show();
            return (int) Math.ceil((float)cursor.getCount()/2);
        }

        @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) {
            myp = parent;
            View v;

            if(convertView == null){
                v = LayoutInflater.from(context).inflate(R.layout.galitem2, parent, false);
            }else{
                v = convertView;

            }


            ImageView photo = (ImageView) v.findViewById(R.id.imageView);
            ImageView border = (ImageView) v.findViewById(R.id.borderView);
            d = (ImageView) v.findViewById(R.id.delView);

            ImageView photo2 = (ImageView) v.findViewById(R.id.image2View);
            ImageView border2 = (ImageView) v.findViewById(R.id.border2View);
            d2 = (ImageView) v.findViewById(R.id.del2View);

                cursor.moveToPosition(position*2);

                // Get the current value for the requested column
                imageID = cursor.getInt(columnIndex);
                // obtain the image URI
                uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) );
                url = uri.toString();
                // Set the content of the image based on the image URI
                originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length()));
                Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(),
                                originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
                photo.setImageBitmap(b);

                photo.setScaleType(ImageView.ScaleType.FIT_CENTER); 
                d.setTag(uri);
                d.setOnClickListener(new OnClickListener(){


                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        String path = getRealPathFromURI((Uri) v.getTag());

                        File file = new File(path);
                        file.delete();
                        getContentResolver().delete((Uri) v.getTag(), null, null);
                        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()+"/LC/images/")));
                        Intent galView = new Intent(getBaseContext(), GalleryView2.class);
                        galView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        getBaseContext().startActivity(galView);
                        finish();


                    }


                });
               if(position*2+1<=cursor.getCount()-1){
                  // Move cursor NEXT current position

                    cursor.moveToPosition(position*2+1);

                    // Get the current value for the requested column
                    imageID = cursor.getInt(columnIndex);
                    // obtain the image URI
                    uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) );
                    url = uri.toString();
                    // Set the content of the image based on the image URI
                    originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length()));
                    Bitmap b2 = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(),
                                    originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
                    photo2.setImageBitmap(b2);

                    photo2.setScaleType(ImageView.ScaleType.FIT_CENTER);    
                    d2.setTag(uri);
                    d2.setOnClickListener(new OnClickListener(){


                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            String path = getRealPathFromURI((Uri) v.getTag());

                            File file = new File(path);
                            file.delete();
                            getContentResolver().delete((Uri) v.getTag(), null, null);
                            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()+"/LC/images/")));
                            Intent galView = new Intent(getBaseContext(), GalleryView2.class);
                            galView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            getBaseContext().startActivity(galView);
                            finish();


                        }


                    });
                }else{
                    //border2.setVisibility(v.INVISIBLE);
                    d2.setVisibility(v.INVISIBLE);

               }

            return v;
        }

    }



}
4

1 に答える 1

1

待ってください、あなたが望むのはそれだけではありません:

first photo -> cursor.moveToPosition(position * 2);
second photo -> cursor.moveToPosition(position * 2 + 1);

アダプタの で適切なサイズを返すだけですgetCount()

于 2012-04-01T22:29:03.387 に答える