从通过从parse.com叫所有图像网格视图和刷卡加载图像 [英] Load image from grid view and swipe through all images called from parse.com

查看:184
本文介绍了从通过从parse.com叫所有图像网格视图和刷卡加载图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我成功加载在我的网格视图图片来自parse.com,但我有麻烦的形象传递给我的ImageDetail类,也是我试图加载图像中的ViewPager这样我可以通过刷卡根据发送的图像的位置在画廊图像。

下面是一些code参考,我会很感激的任何帮助或建议,以帮助我更接近我所想要的目的。

下面是我的适配器,用于我的画廊:

 公共类GalleryAdapter延伸BaseAdapter {    上下文语境;
    LayoutInflater膨胀;
    LoadImages loadImages;
    公共静态列表< MyImages> galleryImages;
    私人的ArrayList< MyImages> imageUrls;
    公共GalleryAdapter(上下文的背景下,列表与LT; MyImages> galleryImages){
        this.context =背景;
        this.galleryImages = galleryImages;
        膨胀= LayoutInflater.from(背景);
        this.imageUrls =新的ArrayList< MyImages>();
        this.imageUrls.addAll(galleryImages);        loadImages =新LoadImages(背景);    }    公共类ViewHolder {
        ImageView的图片;
    }    @覆盖
    公众诠释的getCount(){
        返回galleryImages.size();
    }    @覆盖
    公共对象的getItem(INT位置){
        返回galleryImages.get(位置);
    }    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }
    @覆盖
    公共查看getView(最终诠释的立场,观点来看,一个ViewGroup父){
        // TODO自动生成方法存根
        最后ViewHolder持有人;
        如果(查看== NULL){
            持有人=新ViewHolder();
            鉴于= inflate.inflate(R.layout.gallery_image,NULL);
            //找到gallery_image图像
            holder.picture =(ImageView的)view.findViewById(R.id.picture);
            view.setTag(保持器);
        }其他{
            支架=(ViewHolder)view.getTag();
        }        //加载到myGallery的GridView
        loadImages.DisplayImages(galleryImages.get(位置).getImages(),holder.picture);
        GalleriesFragment.myGallery.setOnItemClickListener(新OnItemClickListener(){            @覆盖
            公共无效onItemClick(适配器视图<>母公司,观景,
                    INT位置,长的id){
                图像以ImageDetail观点// TODO通位置                意图viewPic =新意图(背景下,ImageDetail.class);                //传数据
                viewPic.putExtra(峰,galleryImages.get(位置).getImages());                束束=新包();
                bundle.putInt(位置,位置);                //viewPic.putExtra(\"position,galleryImages.get(位置));                //ImageDetail.pager.setCurrentItem(galleryImages.get(position));                context.startActivity(viewPic);
            }
        });        返回视图。
    }
}

和这里就是我试图从画廊拍了拍图片打电话,然后就可以根据图像中选择的位置通过previous /下一张图片刷卡ImageDetail类:

 公共类ImageDetail延伸活动{    私人ViewPager寻呼机;
    公共静态字符串图片;
    LoadImages负荷=新LoadImages(本);
    ImageView的selectedImage;
    ImageView的exitToGallery;
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_image_detail);        //从GalleriesFragment获得意图 - 获得所选图像
        意向方法GetPic = getIntent();
        //获取图像
        // PIC = getPic.getExtras()的getString(PIC);
        PIC = getPic.getStringExtra(PIC);        捆绑的getBundle = getPic.getExtras();
        位置= getBundle.getInt(位置);        //位置= getPic.getExtra(位置);        寻呼机=(ViewPager)findViewById(R.id.pager);
        SwipeImageAdapter swipeAdapter =新SwipeImageAdapter();
        pager.setAdapter(swipeAdapter);
        pager.setCurrentItem(位置);        Toast.makeText(MainActivity.context,
                只要按返回键,返回到画廊。
                Toast.LENGTH_LONG).show();    }    //用于封闭视图
    @覆盖
    公共无效完成(){        super.finish();
    }    //类使用ViewPager扫取图像功能
    私有类SwipeImageAdapter扩展PagerAdapter {        公众诠释的getCount(){            // TODO自动生成方法存根
            返回GalleryAdapter.imageUrls.size();        }        / *
         * //似乎无法获得图像的正确位置抽头公共字符串
         *的getItem(INT位置){// TODO自动生成方法存根
         *
         * //返回GalleryAdapter.getImageurls()获得(位置);返回
         * GalleriesFragment.galleryImages.get(位置)的ToString();
         *
         *}
         *
         *众长getItemId(INT位置){// TODO自动生成方法
         *存根
         *
         *返回位置;
         *
         *}
         * /        @覆盖
        公共布尔isViewFromObject(查看视图,obj对象){
            // TODO自动生成方法存根
            返回查看==((ImageView的)目标文件);
        }        @覆盖
        公共对象instantiateItem(ViewGroup中的容器,INT位置){
            上下文的背景下= ImageDetail.this;            selectedImage =新ImageView的(上下文);
            exitToGallery =新ImageView的(上下文);
            exitToGallery.setImageResource(R.drawable.close);            LinearLayout.LayoutParams布局=新LinearLayout.LayoutParams(
                    300,500);
            selectedImage.setLayoutParams(布局);
            // pager.getCurrentItem();            // loading.DisplayImages(GalleryAdapter.imageUrls.indexOf(位置),
            // selectedImage);            loading.DisplayImages(PIC,selectedImage);
            // selectedImage.setImageResource(GalleryAdapter.imageUrls.indexOf(的getBundle));
            //使用下面绵延的图像,但否则出现微小的图像细节页=(上
            selectedImage.setScaleType(ImageView.ScaleType.FIT_XY);            // selectedImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);            exitToGallery.setOnClickListener(新OnClickListener(){                @覆盖
                公共无效的onClick(视图v){
                    // TODO返回画廊
                    完();                }            });            ((ViewPager)容器).addView(selectedImage,0);
            ((ViewPager)容器).addView(exitToGallery,0);            返回selectedImage;
        }        @覆盖
        公共无效destroyItem(ViewGroup中的容器,INT位置,obj对象){
            ((ViewPager)容器).removeView((ImageView的)目标文件);
        }    }
}

- 我也尝试了从装载的意图传递到对ImageDetail活动图像视图的形象,但我不能让图像显示

我有更多的类/ code为扎入从parse.com叫我的图片参考,但我认为我所共享的,现在可够上下文。

编辑,包括加载我的形象类

 公共类LoadImages {    CacheMemory cacheMem =新CacheMemory();
    求CacheFile求CacheFile;
    私人地图< ImageView的,字符串> myPictures = Collections.synchronizedMap(新的WeakHashMap< ImageView的,字符串>());    ExecutorService的executeService;
    //这将显示图像,UI
    处理器handleImages =新的处理程序();    公共LoadImages(上下文的背景下){
        求CacheFile =新求CacheFile(背景);
        executeService = Executors.newFixedThreadPool(5);
    }    最终诠释占位= R.drawable.famous;    公共无效DisplayImages(字符串URL,ImageView的PIC){
        myPictures.put(PIC,URL);
        位图位图= cacheMem.get(URL);
        如果(位图!= NULL){
            pic.setImageBitmap(位图);
        }其他{
            queuePic(URL,PIC);
            pic.setImageResource(占位符);
        }
    }    私人无效queuePic(字符串URL,ImageView的PIC){
        PicToLoad loadPic =新PicToLoad(URL,PIC);
        executeService.submit(新PicLoader(loadPic));
    }    私人位图getBitmap(字符串URL){
        文件fil​​e = cacheFile.getFile(URL);
        位图newBitmap =去code(文件);
        如果(newBitmap!= NULL){
            返回newBitmap;
        }        //来自parse.com下载我的画廊图片
        尝试{
            位图位图= NULL;
            URL = imgUrl的新的URL(网址);
            HttpURLConnection的连接=(HttpURLConnection类)imgUrl.openConnection();
            connect.setConnectTimeout(20000);
            connect.setReadTimeout(20000);
            connect.setInstanceFollowRedirects(真);            输入的InputStream = connect.getInputStream();
            OutputStream的输出=新的FileOutputStream(文件);
            Utilities.copy(输入,输出);
            output.close();
            connect.disconnect();
            位=去code(文件);
            返回位图;
        }赶上(Throwable异常){
            exception.printStackTrace();
            如果(例外的instanceof的OutOfMemoryError)
                cacheMem.clear();
            返回null;
        }
    }    //德code的形象,规模,减少内存使用
    私人位图德code(档案文件){
        尝试{
            BitmapFactory.Options选项=新BitmapFactory.Options();
            options.inJustDe codeBounds = TRUE;
            的FileInputStream流=新的FileInputStream(文件);
            BitmapFactory.de codeStream(流空,期权);
            stream.close();            最终诠释desiredImgSize = 150;
            INT宽度= options.outWidth,身高= options.outHeight;
            int标= 1;
            而(真){
                如果(宽度/ 2'; desiredImgSize ||高度/ 2版; desiredImgSize)
                    打破;
                    宽度/ = 2;
                    高度/ = 2;
                    规模* = 2;            }            BitmapFactory.Options选项2 =新BitmapFactory.Options();
            options2.inSampleSize =规模;
            流2的FileInputStream =新的FileInputStream(文件);
            位图位图= BitmapFactory.de codeStream(流2,空,选项2);
            stream2.close();
            返回位图;
        }赶上(FileNotFoundException异常五){        }赶上(IOException异常五){
            e.printStackTrace();
        }        返回null;
    }    //队列
    私有类PicToLoad {
        公共字符串的URL;
        公共ImageView的图片;        公共PicToLoad(字符串URL2,ImageView的PIC2){
            URL = URL2;
            PIC = PIC2;
        }
    }    类PicLoader实现Runnable {
        PicToLoad picToLoad;        PicLoader(PicToLoad picToLoad){
            this.picToLoad = picToLoad;
        }        @覆盖
        公共无效的run(){
            // TODO自动生成方法存根
            尝试{
                如果(recycleImageView(picToLoad))
                    返回;
                位图位= getBitmap(picToLoad.url);
                cacheMem.put(picToLoad.url,位);
                如果(recycleImageView(picToLoad))
                    返回;
                DisplayBit​​map显示=新DisplayBit​​map(位picToLoad);
                handleImages.post(显示);
            }赶上(Throwable的E){
                e.printStackTrace();
            }
        }    }     布尔recycleImageView(PicToLoad picToLoad){
            字符串标记= myPictures.get(picToLoad.pic);
            如果(标记== NULL ||!tag.equals(picToLoad.url))
                返回true;
            返回false;
        }    //在UI显示位图
    类DisplayBit​​map实现Runnable {
        位图位图;
        PicToLoad picToLoad;        公共DisplayBit​​map(位图BM,PicToLoad PL){
            位= BM;
            picToLoad = PL;
        }        @覆盖
        公共无效的run(){
            // TODO自动生成方法存根
            如果(recycleImageView(picToLoad))
                返回;
            如果(位图!= NULL){
                picToLoad.pic.setImageBitmap(位图);
            }其他{
                picToLoad.pic.setImageResource(占位符);
            }        }
    }    公共无效clearCache(){
        cacheMem.clear();
        cacheFile.clear();
    }}


解决方案

因此​​,对于谁可能遇到同样的问题,因为我的人,我得到了它的工作!

当我通过图片:

  GalleriesFragment.myGallery.setOnItemClickListener(新OnItemClickListener(){        @覆盖
        公共无效onItemClick(适配器视图<>母公司,观景,
                INT位置,长的id){
            图像以ImageDetail观点// TODO通位置            意图viewPic =新意图(背景下,ImageDetail.class);            //传数据
            viewPic.putExtra(峰,galleryImages.get(位置).getImages());
            //传位置
            viewPic.putExtra(ID,位置);            context.startActivity(viewPic);
        }
    });

和如何接受它:

 公共类ImageDetail延伸活动{
    //从私人变更为公共静态
    公共静态ViewPager寻呼机;
    公共静态字符串图片;
    公共静态INT位置;
    LoadImages负荷=新LoadImages(本);
    ImageView的selectedImage;
    ImageView的exitToGallery;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_image_detail);        //从GalleriesFragment获得意图 - 获得所选图像
        意向方法GetPic = getIntent();
        //获取图像
        PIC = getPic.getStringExtra(PIC);
        //获得寻呼机位置打开图像挖掘和展示
        。位置= getPic.getExtras()调用getInt(ID);        Log.d(位置=+位置+);        寻呼机=(ViewPager)findViewById(R.id.pager);
        SwipeImageAdapter swipeAdapter =新SwipeImageAdapter();
        pager.setAdapter(swipeAdapter);
        pager.setCurrentItem(位置);
        Toast.makeText(MainActivity.context,
                只要按返回键,返回到画廊。
                Toast.LENGTH_LONG).show();    }    //用于封闭视图
    @覆盖
    公共无效完成(){        super.finish();
    }    //类使用ViewPager扫取图像功能
    私有类SwipeImageAdapter扩展PagerAdapter {        公众诠释的getCount(){            // TODO自动生成方法存根
            返回GalleryAdapter.imageUrls.size();        }        对象的getItem(INT位置){            返回的位置;
        }
        @覆盖
        公共布尔isViewFromObject(查看视图,obj对象){
            // TODO自动生成方法存根
            返回查看==((ImageView的)目标文件);
        }        @覆盖
        公共对象instantiateItem(ViewGroup中的容器,INT位置){
            上下文的背景下= ImageDetail.this;            selectedImage =新ImageView的(上下文);
            exitToGallery =新ImageView的(上下文);
            exitToGallery.setImageResource(R.drawable.close);            LinearLayout.LayoutParams布局=新LinearLayout.LayoutParams(
                    300,500);
            selectedImage.setLayoutParams(布局);            字符串IMG = GalleryAdapter.galleryImages.get(位置).getImages();            loading.DisplayImages(IMG,selectedImage);            selectedImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);            exitToGallery.setOnClickListener(新OnClickListener(){                @覆盖
                公共无效的onClick(视图v){
                    // TODO返回画廊
                    完();                }            });            ((ViewPager)容器).addView(selectedImage,0);
            ((ViewPager)容器).addView(exitToGallery,0);            返回selectedImage;
        }        @覆盖
        公共无效destroyItem(ViewGroup中的容器,INT位置,obj对象){
            ((ViewPager)容器).removeView((ImageView的)目标文件);
        }    }
}

So I am successfully loading images in my grid view from parse.com, but I am having trouble passing the image to my ImageDetail class, and also I'm trying to load the image in a ViewPager so that I can swipe through the images in the gallery based on the position of the image sent..

Here's some code for reference, I would be so grateful as to any help or suggestions to help me get closer to what I am trying to achieve.

Here's my adapter for my Gallery:

public class GalleryAdapter extends BaseAdapter {

    Context context;
    LayoutInflater inflate;
    LoadImages loadImages;
    public static List<MyImages> galleryImages;
    private ArrayList<MyImages> imageUrls;


    public GalleryAdapter(Context context, List<MyImages> galleryImages){
        this.context = context;
        this.galleryImages = galleryImages;
        inflate = LayoutInflater.from(context);
        this.imageUrls = new ArrayList<MyImages>();
        this.imageUrls.addAll(galleryImages);

        loadImages = new LoadImages(context);

    }

    public class ViewHolder {
        ImageView picture;
    }

    @Override
    public int getCount() {
        return galleryImages.size();
    }

    @Override
    public Object getItem(int position) {
        return galleryImages.get(position);
    }

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


    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        // TODO Auto-generated method stub
        final ViewHolder holder;
        if (view == null){
            holder = new ViewHolder();
            view = inflate.inflate(R.layout.gallery_image, null);
            // find image in gallery_image
            holder.picture = (ImageView) view.findViewById(R.id.picture);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }

        // load into myGallery gridview
        loadImages.DisplayImages(galleryImages.get(position).getImages(), holder.picture);
        GalleriesFragment.myGallery.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO pass position of image to ImageDetail view

                Intent viewPic = new Intent(context, ImageDetail.class);

                // pass data
                viewPic.putExtra("pic", galleryImages.get(position).getImages());

                Bundle bundle = new Bundle();
                bundle.putInt("position", position);

                //viewPic.putExtra("position", galleryImages.get(position));

                //ImageDetail.pager.setCurrentItem(galleryImages.get(position));

                context.startActivity(viewPic);
            }


        });

        return view;
    }


}

And here is the ImageDetail class where I am attempting to call in the picture tapped from the gallery and then be able to swipe through previous/next images according to the position of the image selected:

public class ImageDetail extends Activity {

    private ViewPager pager;
    public static String pic;
    LoadImages loading = new LoadImages(this);
    ImageView selectedImage;
    ImageView exitToGallery;


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

        // get intent from GalleriesFragment - get selected image
        Intent getPic = getIntent();
        // get image
        // pic = getPic.getExtras().getString("pic");
        pic = getPic.getStringExtra("pic");

        Bundle getBundle = getPic.getExtras();
        position = getBundle.getInt("position");

        // position = getPic.getExtra("position");

        pager = (ViewPager) findViewById(R.id.pager);
        SwipeImageAdapter swipeAdapter = new SwipeImageAdapter();
        pager.setAdapter(swipeAdapter);
        pager.setCurrentItem(position);

        Toast.makeText(MainActivity.context,
                "Simply hit the back key to return to Galleries.",
                Toast.LENGTH_LONG).show();

    }

    // for closing the view
    @Override
    public void finish() {

        super.finish();
    }

    // Class for Swipe Image Functionality using ViewPager
    private class SwipeImageAdapter extends PagerAdapter {

        public int getCount() {

            // TODO Auto-generated method stub
            return GalleryAdapter.imageUrls.size();

        }

        /*
         * // can't seem to get correct position of image tapped public String
         * getItem(int position) { // TODO Auto-generated method stub
         * 
         * //return GalleryAdapter.getImageurls().get(position); return
         * GalleriesFragment.galleryImages.get(position).toString();
         * 
         * }
         * 
         * public long getItemId(int position) { // TODO Auto-generated method
         * stub
         * 
         * return position;
         * 
         * }
         */

        @Override
        public boolean isViewFromObject(View view, Object obj) {
            // TODO Auto-generated method stub
            return view == ((ImageView) obj);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Context context = ImageDetail.this;

            selectedImage = new ImageView(context);
            exitToGallery = new ImageView(context);
            exitToGallery.setImageResource(R.drawable.close);

            LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(
                    300, 500);
            selectedImage.setLayoutParams(layout);
            // pager.getCurrentItem();

            // loading.DisplayImages(GalleryAdapter.imageUrls.indexOf(position),
            // selectedImage);

            loading.DisplayImages(pic, selectedImage);
            // selectedImage.setImageResource(GalleryAdapter.imageUrls.indexOf(getBundle));
            // using below stretches images, but otherwise they show up tiny on the image detail page =(
            selectedImage.setScaleType(ImageView.ScaleType.FIT_XY);

            // selectedImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

            exitToGallery.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO return to Galleries
                    finish();

                }

            });

            ((ViewPager) container).addView(selectedImage, 0);
            ((ViewPager) container).addView(exitToGallery, 0);

            return selectedImage;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object obj) {
            ((ViewPager) container).removeView((ImageView) obj);
        }

    }
}

-- I've also tried just loading the image passed from the intent into an image view on the ImageDetail activity, but I can't get the image to display.

I have more classes/code for reference that tie into calling my images from parse.com, but I think what I've shared may be enough for context right now.

Edited to include a class that loads my image

public class LoadImages {

    CacheMemory cacheMem = new CacheMemory();
    CacheFile cacheFile;
    private Map<ImageView, String> myPictures = Collections.synchronizedMap(new WeakHashMap<ImageView, String>());

    ExecutorService executeService;
    // this will display images to UI
    Handler handleImages = new Handler();

    public LoadImages(Context context){
        cacheFile = new CacheFile(context);
        executeService = Executors.newFixedThreadPool(5);
    }

    final int placeholder = R.drawable.famous;

    public void DisplayImages(String url, ImageView pic){
        myPictures.put(pic, url);
        Bitmap bitmap = cacheMem.get(url);
        if (bitmap != null){
            pic.setImageBitmap(bitmap);
        } else {
            queuePic(url, pic);
            pic.setImageResource(placeholder);
        }
    }

    private void queuePic(String url, ImageView pic){
        PicToLoad loadPic = new PicToLoad(url, pic);
        executeService.submit(new PicLoader(loadPic));
    }

    private Bitmap getBitmap(String url){
        File file = cacheFile.getFile(url);
        Bitmap newBitmap = decode(file);
        if (newBitmap != null){
            return newBitmap;
        }

        // download my gallery images from parse.com
        try {
            Bitmap bitmap = null;
            URL imgUrl = new URL(url);
            HttpURLConnection connect = (HttpURLConnection) imgUrl.openConnection();
            connect.setConnectTimeout(20000);
            connect.setReadTimeout(20000);
            connect.setInstanceFollowRedirects(true);

            InputStream input = connect.getInputStream();
            OutputStream output = new FileOutputStream(file);
            Utilities.copy(input, output);
            output.close();
            connect.disconnect();
            bitmap = decode(file);
            return bitmap;
        } catch (Throwable exception){
            exception.printStackTrace();
            if (exception instanceof OutOfMemoryError)
                cacheMem.clear();
            return null;
        }
    }

    // decode image, scale to reduce memory usage
    private Bitmap decode(File file) {
        try{
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            FileInputStream stream = new FileInputStream(file);
            BitmapFactory.decodeStream(stream, null, options);
            stream.close();

            final int desiredImgSize = 150;
            int width = options.outWidth, height = options.outHeight;
            int scale = 1;
            while (true){
                if (width / 2 < desiredImgSize || height / 2 < desiredImgSize)
                    break;
                    width /= 2;
                    height /= 2;
                    scale *= 2;

            }

            BitmapFactory.Options options2 = new BitmapFactory.Options();
            options2.inSampleSize = scale;
            FileInputStream stream2 = new FileInputStream(file);
            Bitmap bitmap = BitmapFactory.decodeStream(stream2, null, options2);
            stream2.close();
            return bitmap;
        } catch (FileNotFoundException e){

        } catch (IOException e){
            e.printStackTrace();
        }

        return null;
    }

    // for queue
    private class PicToLoad {
        public String url;
        public ImageView pic;

        public PicToLoad(String url2, ImageView pic2){
            url = url2;
            pic = pic2;
        }
    }

    class PicLoader implements Runnable {
        PicToLoad picToLoad;

        PicLoader(PicToLoad picToLoad) {
            this.picToLoad = picToLoad;
        }

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                if (recycleImageView(picToLoad))
                    return;
                Bitmap bit = getBitmap(picToLoad.url);
                cacheMem.put(picToLoad.url, bit);
                if (recycleImageView(picToLoad))
                    return;
                DisplayBitmap display = new DisplayBitmap(bit, picToLoad);
                handleImages.post(display);
            } catch (Throwable e){
                e.printStackTrace();
            }
        }   

    }

     boolean recycleImageView(PicToLoad picToLoad) {
            String tag = myPictures.get(picToLoad.pic);
            if (tag == null || !tag.equals(picToLoad.url))
                return true;
            return false;
        }

    // display Bitmap on UI
    class DisplayBitmap implements Runnable {
        Bitmap bitmap;
        PicToLoad picToLoad;

        public DisplayBitmap(Bitmap bm, PicToLoad pl){
            bitmap = bm;
            picToLoad = pl;
        }

        @Override
        public void run() {
            // TODO Auto-generated method stub
            if (recycleImageView(picToLoad))
                return;
            if (bitmap != null){
                picToLoad.pic.setImageBitmap(bitmap);
            } else {
                picToLoad.pic.setImageResource(placeholder);
            }

        }
    }

    public void clearCache(){
        cacheMem.clear();
        cacheFile.clear();
    }

}

解决方案

So for anyone who might run into the same issue as me, I got it working!

When I pass the image:

GalleriesFragment.myGallery.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO pass position of image to ImageDetail view

            Intent viewPic = new Intent(context, ImageDetail.class);

            // pass data
            viewPic.putExtra("pic", galleryImages.get(position).getImages());
            // pass position
            viewPic.putExtra("id", position);

            context.startActivity(viewPic);
        }


    });

And how to receive it:

public class ImageDetail extends Activity {
    // changed from private to public static
    public static ViewPager pager;
    public static String pic;
    public static int position;
    LoadImages loading = new LoadImages(this);
    ImageView selectedImage;
    ImageView exitToGallery;

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

        // get intent from GalleriesFragment - get selected image
        Intent getPic = getIntent();
        // get image
        pic = getPic.getStringExtra("pic");
        // get position to open image tapped and display in the pager
        position = getPic.getExtras().getInt("id");

        Log.d("position = ", +position+"");

        pager = (ViewPager) findViewById(R.id.pager);
        SwipeImageAdapter swipeAdapter = new SwipeImageAdapter();
        pager.setAdapter(swipeAdapter);
        pager.setCurrentItem(position);


        Toast.makeText(MainActivity.context,
                "Simply hit the back key to return to Galleries.",
                Toast.LENGTH_LONG).show();

    }

    // for closing the view
    @Override
    public void finish() {

        super.finish();
    }

    // Class for Swipe Image Functionality using ViewPager
    private class SwipeImageAdapter extends PagerAdapter {

        public int getCount() {

            // TODO Auto-generated method stub
            return GalleryAdapter.imageUrls.size();

        }

        Object getItem(int position){

            return position;
        }


        @Override
        public boolean isViewFromObject(View view, Object obj) {
            // TODO Auto-generated method stub
            return view == ((ImageView) obj);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Context context = ImageDetail.this;

            selectedImage = new ImageView(context);
            exitToGallery = new ImageView(context);
            exitToGallery.setImageResource(R.drawable.close);

            LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(
                    300, 500);
            selectedImage.setLayoutParams(layout);

            String img = GalleryAdapter.galleryImages.get(position).getImages();

            loading.DisplayImages(img, selectedImage);

            selectedImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

            exitToGallery.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO return to Galleries
                    finish();

                }

            });

            ((ViewPager) container).addView(selectedImage, 0);
            ((ViewPager) container).addView(exitToGallery, 0);

            return selectedImage;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object obj) {
            ((ViewPager) container).removeView((ImageView) obj);
        }

    }
}

这篇关于从通过从parse.com叫所有图像网格视图和刷卡加载图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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