`

gallery加载大量图片时内存溢出的解决方法(二)

阅读更多

Paint deafalutPaint = new Paint();

        canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);

        canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

        Paint paint = new Paint();

        LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,

                bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,

                0x00ffffff, TileMode.CLAMP);

        paint.setShader(shader);

        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

        canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()

                + reflectionGap, paint);

        return bitmapWithReflection;

    }

}

 

2、加载图片的线程

    class MyThread extends Thread{

        int index;

        public MyThread(int index) {

            super();

            this.index = index;

        }

        @Override

        public void run() {

            if (imageList.get(index).getIsNull().equals(ISTRUE)) {          imageList.get(index).setImage(ImageManager.getRefImage(imageList.get(index)

                                .getPath()));

                imageList.get(index).setIsNull(ISFALSE);

            }

            refreshAdapter();

        }

        }

 

 

 

3gallery的滑动事件

private Gallery.OnItemSelectedListener itemSelected_listener = new Gallery.OnItemSelectedListener() {

        @Override

        public void onItemSelected(AdapterView<?> arg0, View arg1, int position,

                long arg3) {

            toShowIndex = position;

            final Handler handler = new Handler() {

                @Override

                public void handleMessage(Message msg) {

                    if (showingIndex != toShowIndex) {

                        showingIndex = toShowIndex;

                        // 业务逻辑处理

                        if (toShowIndex < imageList.size()) {

                            addImage(toShowIndex);

                        }

                    }

                }

            };

            Thread checkChange = new Thread() {

                @Override

                public void run() {

                    int myIndex = toShowIndex;

                    try {

                        sleep(TIME_OUT_DISPLAY);

                        if (myIndex == toShowIndex) {

                            handler.sendEmptyMessage(0);

                        }

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                }

            };

            checkChange.start();

            TextView gallery_total =  (TextView) findViewById(R.id.gallery_total);

            gallery_total.setText((toShowIndex + 1) + "/"+ imageList.size());       }

        @Override

        public void onNothingSelected(AdapterView<?> arg0) {

        }

    };

4、更新ImageAdapter

    private void refreshAdapter() {

        this.runOnUiThread(new Runnable() {

            @Override

            public void run() {

                adpter.notifyDataSetChanged();

            }

        });

    }

5、从sd卡里获取图片后封装对象

    public List<ImageMessage> getAllImageMessage() {

        List<ImageMessage> imageList = new ArrayList<ImageMessage>();

                getSD(Environment.getExternalStorageDirectory().toString()+ "/");

        for (int i = 0; i < pathList.size(); i++) {

            ImageMessage im = new ImageMessage();

            im.setPath(pathList.get(i)[0]);

            im.setName(pathList.get(i)[1]);

            im.setIsNull(ISTRUE);

            imageList.add(im);

        }

        return imageList;

    }

分享到:
评论

相关推荐

    gallery加载大量图片时内存溢出的解决方法(一)

    在开发Android应用时,尤其是创建图像...通过这些方法的组合应用,可以显著降低gallery加载大量图片时出现内存溢出的风险,提升应用的性能和稳定性。在实际开发中,应根据项目需求和性能测试结果选择最适合的优化策略。

    针对Android应用中Gallery内存溢出的解决方案.pdf

    在Android应用中,Gallery(画廊)组件被广泛用于展示和浏览图片,但由于图片文件通常较大,特别是高清图片,当用户需要浏览大量图片时,容易导致内存溢出,严重影响用户体验和应用稳定性。 #### Android应用架构与...

    gallery加载大图片可以更换sd卡路径不溢出有倒影效果

    当应用需要展示大量大图时,如果不进行优化,可能会导致内存溢出(Out Of Memory,简称OOM),因为大图片会消耗大量内存。为避免这种情况,开发者通常采用图片库如Glide、Picasso或Universal Image Loader等来加载...

    Android应用源码 Gallery实现异步加载网络图片 并只加载当前停止页面图.zip

    因此,当加载大量图片时,必须考虑到内存管理。只加载当前停止页面的图片是一种有效的策略,可以避免一次性加载过多图片导致内存溢出。这可能通过监听Gallery的滚动事件并在需要时加载图片来实现。 4. **图片缓存**...

    android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip

    然而,直接加载网络图片到Gallery中会带来性能问题,因为这可能导致大量的网络请求,消耗大量内存,并可能造成应用卡顿。为了解决这个问题,我们需要异步加载图片,即在后台线程下载图片,然后在UI线程更新显示,以...

    Android应用源码 Gallery实现异步加载网络图片

    在Android开发中,图片加载是一个常见的需求,尤其是在创建一个类似画廊(Gallery)的应用时,用户通常希望可以滚动浏览大量的网络图片。`Android应用源码 Gallery实现异步加载网络图片`是一个典型的问题,它涉及到...

    安卓Android源码——Gallery实现异步加载网络图片 并只加载当前停止页面图.zip

    在Gallery中,关键在于处理好滚动时的图片加载逻辑,防止内存溢出。 4. **只加载当前停止页面图**: 这种策略被称为懒加载(Lazy Loading),它意味着只有当图片所在的页面进入可视区域时才开始加载。这样可以显著...

    【计算机专业-Andorid项目源码100套之】android Gallery实现异步加载网络图片 并只加载当前停止页面图

    5. **图片处理**:在加载网络图片时,可能需要根据设备屏幕尺寸和Gallery的大小进行适当的缩放,以避免加载过大图片导致内存溢出。 6. **图片占位符**:在图片真正加载之前,可以显示一个占位符,如一个加载动画或...

    android Gallery 3d 图片浏览 oom

    在Android开发中,"android Gallery 3d 图片浏览 oom"是一个常见的问题,尤其是在处理大量图片时。oom,全称是Out Of Memory,即内存溢出错误,当应用程序分配的内存超过系统能提供的范围时,就会触发这个错误。本文...

    大量图片优化

    在Android开发中,处理大量图片时常常会遇到内存溢出(Out of Memory)的问题,...通过以上策略,可以有效解决Android应用在加载大量图片时可能出现的内存溢出问题,同时优化虚拟机内存使用,提升应用的稳定性和性能。

    Gallery从SD卡中获取图片,并显示.rar

    使用`decodeFile()`方法可以从文件路径加载图片,然后可以通过` BitmapFactory.Options`控制内存使用,避免内存溢出。 3. **自定义Gallery视图**:Android原生的`Gallery`组件在Android 3.0(API级别11)之后已被弃...

    安卓Gallery照片墙画廊图库相关-异步加载图库中的图片.rar

    4. **图片压缩**:加载大图可能导致内存溢出,因此需要在加载前对图片进行压缩处理,控制其占用的内存大小。 5. **占位符和错误图**:在图片加载过程中显示占位符,加载失败时显示错误图,提供良好的用户体验。 6....

    安卓Gallery照片墙画廊图库相关-DragToSortImage相册加载和图片拖拽.rar

    比如,使用LruCache或其他内存缓存策略,避免一次性加载所有图片导致内存溢出;使用低分辨率的缩略图减少内存占用;并确保在图片不再需要时正确释放资源。 9. **用户界面设计** 良好的拖放体验需要直观的视觉反馈...

    Android--从系统Camera和Gallery获取图片优化

    在Android开发中,获取并处理图片是一项常见的任务,但如果不进行优化,可能会导致内存溢出、性能下降等问题。本文将详细探讨如何优化从系统Camera和Gallery获取图片的过程,以提高应用的性能和用户体验。 首先,...

    android gallery图片轮播

    4. ** Glide / Picasso / Fresco**:这些是流行的图片加载库,可以帮助开发者高效地加载和缓存网络或本地的图片,避免内存溢出并优化性能。在图片轮播中,它们可以无缝集成到ViewPager中,实现动态加载和显示图片。 ...

    大图片所引起的内存问题

    这是因为Android设备为每个应用分配的内存是有限的,而大图片会占用大量内存,当应用试图加载过多或过大的图片时,如果没有合理管理,就可能导致内存耗尽,从而引发应用程序崩溃。 首先,我们要理解Bitmap对象在...

    Android图片异步加载大全

    - 加载大图时,需关注Bitmap的配置,如设置合理的Bitmap配置(inSampleSize,解码格式),以防止OOM(内存溢出)。 8. **缓存策略** - 合理的缓存策略能显著提升用户体验,例如LRU(Least Recently Used)算法...

    C# Android Gallery-Dome 图片滑动效果显示

    这些库可以缓存图片,避免内存溢出,同时支持异步加载和占位符,提高用户体验。 5. **Adapter与数据绑定**: 图片滑动效果通常与Adapter结合使用,如PagerAdapter或RecyclerView.Adapter。Adapter负责将数据集(如...

Global site tag (gtag.js) - Google Analytics