Android gridview通过使用AsyncTask图像加载问题

时间:2013-01-16 08:56:16

标签: android image gridview android-asynctask

我是android新手。我正在使用AsyncTask在gridview中显示图像。但是有一些问题,如:

1:onScroll AsyncTask任务再次调用。 2:图像显示不正确(一旦我滚动它就显示顶部图像并加载原始图像。)

这是我的代码:

    public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater layoutInflater = (LayoutInflater) ctx
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            ListRowHolder listRowHolder;
            if (convertView == null) {
                convertView = layoutInflater.inflate(R.layout.ll_sponsor_list_item,
                        parent, false);
                listRowHolder = new ListRowHolder();
                listRowHolder.imgSponsor = (ImageView) convertView
                        .findViewById(R.id.imggrid_item_image);
                convertView.setTag(listRowHolder);

            } else {
                listRowHolder = (ListRowHolder) convertView.getTag();
            }
            try {
                task = new BitmapWorkerTask(listRowHolder.imgSponsor);
                task.image_path = ImageName.get(position);
                task.execute(1);

            } catch (Exception e) {
                if (thisLogger != null) {
                    thisLogger.error(e.toString());
                    thisLogger.error("\r\n");
                }
            }

            return convertView;
        }



class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
        private final WeakReference<ImageView> imageViewReference;

        private String image_path;

        public BitmapWorkerTask(ImageView imageView) {
            imageViewReference = new WeakReference<ImageView>(imageView);
        }



@Override
    protected Bitmap doInBackground(Integer... params) {

        try {
            while (running) {
                Bitmap picture = BitmapFactory.decodeFile(image_path);
                int width = picture.getWidth();
                int height = picture.getHeight();
                float aspectRatio = (float) width / (float) height;
                int newWidth = 98;
                int newHeight = (int) (98 / aspectRatio);
                Log.v("ImageList", "L");
                return picture = Bitmap.createScaledBitmap(picture,
                        newWidth, newHeight, true);

            } 
        } catch (Exception e) {
            if (thisLogger != null) {
                thisLogger.error(e.toString());
                thisLogger.error("\r\n");
            }
        }
        return null;

    }


    @Override
            protected void onPostExecute(Bitmap bitmap) {
                if (imageViewReference != null && bitmap != null) {
                    final ImageView imageView = imageViewReference.get();
                    if (imageView != null) {
                        imageView.setImageBitmap(bitmap);
                    }

                }

            }

请告诉我这里的错误。

0 个答案:

没有答案