从服务器android中的gridView中加载图像 [英] Loading images in a gridView from server android

查看:120
本文介绍了从服务器android中的gridView中加载图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从我的服务器显示很多图像。没有常规的链接,因为我正在使用AMazon s3服务。这是我的代码下载的图像。因为我需要减少图像大小,这是更好的方式来平滑滚动,或者我需要做别的事情

  public class PinsListAdapter扩展BaseAdapter 
{
private Activity mContext;
private ArrayList< PingModel> pings = new ArrayList< PingModel>();
private LayoutInflater inflater;

public PinsListAdapter(Activity context,ArrayList< PingModel> pings)
{
super();
this.mContext = context;
this.pings = pings;
inflater =(LayoutInflater)this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

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

@Override
public Object getItem(int arg0)
{
return null;
}

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

私有静态类ViewHolder
{
public ImageView vidImgIndicator;
public ImageView pinImg;
public ImageView progress;
}

@Override
public View getView(int position,View convertView,final ViewGroup parent)
{
final PingModel ping = pings.get位置);
ViewHolder holder = null;

if(convertView == null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.adapter_pin_row,parent,false);

holder.pinImg =(ImageView)convertView.findViewById(R.id.pinImg);
holder.progress =(ImageView)convertView.findViewById(R.id.progress);

holder.vidImgIndicator =(ImageView)convertView.findViewById(R.id.vidImgIndicator);

动画anim = AnimationUtils.loadAnimation(mContext,R.anim.rotating_img);
holder.progress.setAnimation(anim);

convertView.setTag(holder);
}
else
{
holder =(ViewHolder)convertView.getTag();
}

final ViewHolder mainHolder = holder;

holder.vidImgIndicator.setVisibility(View.GONE);

final String url = ping.getLocalMediaUrl(mContext);
if(url!= null)/ *图像已经放置* /
{
if(ping.mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_PHOTO)
{
if( ping.thumbnail == null)
{
ping.thumbnail = ImageUtils.getBitmapFromFile(url,80);
}
}
else if(ping.mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_VIDEO)
{
if(ping.thumbnail == null)
{
//ping.thumbnail = ThumbnailUtils.createVideoThumbnail(url,MediaStore.Images.Thumbnails.MINI_KIND);
}
if(ping.thumbnail!= null)
mainHolder.vidImgIndicator.setVisibility(View.VISIBLE);
}

mainHolder.pinImg.setImageBitmap(ping.thumbnail);
}
else
{
holder.pinImg.setImageDrawable(null);
if(ping.isMediaBeingDownloaded == false)
{
AppManager.getInstance()。executor.execute(new Runnable()
{
public void run()
{
ping.isMediaBeingDownloaded = true;
ApiManager.getInstance()。pingManager.downloadMediaOfPingFromServer(ping);
ping.isMediaBeingDownloaded = false;
if(ping。 mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_PHOTO
{
ping.thumbnail = ImageUtils.getBitmapFromFile(url,80);
}
else if(ping.mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_VIDEO)
{
ping.thumbnail = ThumbnailUtils.createVideoThumbnail(url,MediaStore.Images.Thumbnails。 MINI_KIND);
}

mContext.runOnUiThread(new Runnable()
{
@Override
public void run()
{
notifyDataSetChanged();
}
});
}
});
}
}

return convertView;
}
}

请注意执行者。这是正确和合乎逻辑的做法吗,或者我完全错了,我需要做任何其他缓存类型的东西?

解决方案

p>图像下载,缓存,滚动列表中存储是一个非常复杂的情况,我建议没有人自己做。



相反,你应该做大多数应用程序,使用专门针对这项工作的第三方图书馆,我会指出您目前的最佳3种,选择您喜欢的。




I am trying to show a lot of images from my server. There is no conventional link since i am using AMazon s3 services. Here is my code to download the images. Since i need to reduce image size, is this better way of achiving smooth scroll or do i need to do something else

    public class PinsListAdapter extends BaseAdapter
{
    private Activity mContext;
    private ArrayList<PingModel> pings = new ArrayList<PingModel>();
    private LayoutInflater inflater;

    public PinsListAdapter(Activity context, ArrayList<PingModel> pings)
    {
        super();
        this.mContext = context;
        this.pings = pings;
        inflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public Object getItem(int arg0)
    {
        return null;
    }

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

    private static class ViewHolder
    {
        public ImageView vidImgIndicator;
        public ImageView pinImg;
        public ImageView progress;
    }

    @Override
    public View getView(int position, View convertView, final ViewGroup parent)
    {
        final PingModel ping = pings.get(position);
        ViewHolder holder = null;

        if (convertView == null)
        {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.adapter_pin_row, parent, false);

            holder.pinImg    = (ImageView) convertView.findViewById(R.id.pinImg);
            holder.progress  = (ImageView) convertView.findViewById(R.id.progress);

            holder.vidImgIndicator  = (ImageView) convertView.findViewById(R.id.vidImgIndicator);

            Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.rotating_img);
            holder.progress.setAnimation(anim);

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        final ViewHolder mainHolder = holder;

        holder.vidImgIndicator.setVisibility(View.GONE);

        final String url = ping.getLocalMediaUrl(mContext);
        if (url != null) /* Image is already placed */
        {
            if (ping.mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_PHOTO)
            {
                if(ping.thumbnail == null)
                {
                    ping.thumbnail = ImageUtils.getBitmapFromFile(url, 80);
                }
            }
            else if (ping.mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_VIDEO)
            {
                if(ping.thumbnail == null)
                {
                    //ping.thumbnail = ThumbnailUtils.createVideoThumbnail(url, MediaStore.Images.Thumbnails.MINI_KIND );
                }
                if (ping.thumbnail != null)
                    mainHolder.vidImgIndicator.setVisibility(View.VISIBLE);
            }

            mainHolder.pinImg.setImageBitmap(ping.thumbnail);
        }
        else
        {
            holder.pinImg.setImageDrawable(null);
            if (ping.isMediaBeingDownloaded == false)
            {
                AppManager.getInstance().executor.execute(new Runnable()
                {
                    public void run()
                    {
                        ping.isMediaBeingDownloaded = true;
                        ApiManager.getInstance().pingManager.downloadMediaOfPingFromServer(ping);
                        ping.isMediaBeingDownloaded = false;
                        if (ping.mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_PHOTO)
                        {
                            ping.thumbnail = ImageUtils.getBitmapFromFile(url, 80);
                        }
                        else if (ping.mediaAttachmentType == PingModel.PING_MEDIA_ATTACHMENT_TYPE_VIDEO)
                        {
                            ping.thumbnail = ThumbnailUtils.createVideoThumbnail(url, MediaStore.Images.Thumbnails.MINI_KIND);
                        }

                        mContext.runOnUiThread(new Runnable()
                        {
                            @Override
                            public void run()
                            {
                                notifyDataSetChanged();
                            }
                        });
                    }
                });
            }
        }

        return convertView;
    }
}

Please note the executers. Is this correct and logical way of doing it or am i doing it totally wrong and i need to make any other cache type thing?

解决方案

image downloading, caching, storing in a scrolling list is a very very complex situation that I advise nobody to do themselves.

Instead you should do what most apps do, use a 3rd party library specialised for the job I'll point you to 3 of the current "best" ones, pick which ever you prefer.

这篇关于从服务器android中的gridView中加载图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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