基于android_support_v7_widgeet_RecyclerView的瀑布流效果

package com.terton.android.culture.subscription;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.koushikdutta.urlimageviewhelper.UrlImageViewHelper;
import com.terton.android.culture.R;
import com.terton.android.culture.modal.Article;

import java.util.ArrayList;
import java.util.List;

public class Dynamic2Adapter extends RecyclerView.Adapter<Dynamic2Adapter.ViewHolder> implements View.OnClickListener {

    private LayoutInflater layoutInflater;
    private List<Article> _items;

    public Dynamic2Adapter(Context context) {
        this(context, null);
    }

    public Dynamic2Adapter(Context context, List<Article> items) {
        layoutInflater = LayoutInflater.from(context);
        _items = items;
        if (_items == null) {
            _items = new ArrayList<Article>();
        }
    }

    public List<Article> getItems() {
        if (_items == null) {
            _items = new ArrayList<Article>();
        }
        return _items;
    }

    public void setItems(List<Article> items) {
        this._items = items;
    }

    @Override
    public Dynamic2Adapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = layoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_dynamic, viewGroup, false);
        ViewHolder vh = new ViewHolder(view);
        view.setOnClickListener(this);
        return vh;
    }

    @Override
    public void onBindViewHolder(Dynamic2Adapter.ViewHolder holder, int position) {
        Article article = (Article) getItem(position);
        if (article != null) {
            holder.itemView.setTag(article);
            String picUrl = article.getPicUrl();
            if (picUrl != null) {
                UrlImageViewHelper.setUrlDrawable(holder.dynamic_image, picUrl);
                holder.dynamic_pic.setVisibility(View.VISIBLE);
            } else {
                holder.dynamic_pic.setVisibility(View.GONE);
            }

            holder.dynamic_title.setText(article.getTitle());
        }
    }

    @Override
    public int getItemCount() {
        return getItems().size();
    }

    public Object getItem(int position) {
        if (position < getItemCount()) {
            return getItems().get(position);
        }
        return null;
    }

    @Override
    public void onClick(View v) {
        if (null != mOnItemClickListener) {
            mOnItemClickListener.onClick(v, (Article) v.getTag());
        }
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        ImageView dynamic_image;
        TextView dynamic_title;
        ImageView dynamic_favorite;
        RelativeLayout dynamic_pic;

        public ViewHolder(View itemView) {
            super(itemView);
            dynamic_image = (ImageView) itemView.findViewById(R.id.dynamic_image);
            dynamic_title = (TextView) itemView.findViewById(R.id.dynamic_title);
            dynamic_favorite = (ImageView) itemView.findViewById(R.id.dynamic_favorite);
            dynamic_pic = (RelativeLayout) itemView.findViewById(R.id.dynamic_pic);
        }
    }

    private OnRecyclerViewItemClickListener mOnItemClickListener = null;

    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    public static interface OnRecyclerViewItemClickListener {
        void onClick(View view, Article doc);
    }
}
时间: 2024-12-14 07:06:31

基于android_support_v7_widgeet_RecyclerView的瀑布流效果的相关文章

一步步教你js原生瀑布流效果实现

一步步教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一张挨着一张竖直排列 4.鼠标向下滚动,一直不停的加载图片 5.浏览器的宽度改变,图片的列数会进行相应的更改 那么这种效果类似现实生活中的瀑布,所以我们叫它瀑布流的效果. Js原生瀑布流效果的实现 从上述分析中,我们可以把整个效果分为以下四个部分: html+css界面搭建 瀑布流效果 浏览器向下滚动

利用LruCache和DiskLruCache加载网络图片实现图片瀑布流效果(升级版)

MainActivity如下: package cc.patience7; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 采用瀑布流的形式加载大量网络图片 * 详细分析参见WaterfallScrollView * * 更新说明: * 在原本的的基础上添加了本地缓存DiskLruCache * * 所以在该示例中对于图片的缓存采用了:LruCache + DiskLruCache 的技术 * * 参考

利用LruCache加载网络图片实现图片瀑布流效果(改进版)

MainActivity如下: package cc.patience4; import cc.patience4.R; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 采用瀑布流的形式加载大量网络图片 * 详细分析参见WaterfallScrollView * * 更新说明: * 该示例在基础版的基础上加入了图片查看功能. * 点击瀑布流中一张图片后可欣赏图片并能对图片进行单指拖动和两指缩放. * 对

自定义实现带文字标题的瀑布流效果

在网上能找到的大部分资料中的瀑布流效果都是单纯的照片实现,现在我来实现一个带文字标题的.效果如下: 每个item都是由图片和文字标题两部分组成. 布局方式为ScrollView里面嵌套一个水平方向的LinearLayout,里面再嵌套两个竖直方向的LinearLayout,然后判断竖直方向的两个LinearLayout的高度,向比较低的那个Linearlayout里面添加item. 下面是代码 <ScrollView xmlns:android="http://schemas.androi

瀑布流效果的一些收获

瀑布流效果已经流行了很久,之前在项目中做了一次,今天页面改版又做了一次瀑布流的效果,中间又有了一些收获,谨记于此. 这个瀑布流效果是借鉴的网上一位大神写的代码,然后正好在项目中得到了应用. 1 function waterFall(mr, mb) { //mr水平方向的间距,mb垂直方向的间距 2 var ocontainer = document.getElementById("container"); 3 if (ocontainer) { 4 var pageWidth = oc

【前端】用jQuery实现瀑布流效果

jQuery实现瀑布流效果 何为瀑布流: 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早采用此布局的网站是Pinterest,逐渐在国内流行开来.国内大多数清新站基本为这类风格. 瀑布流的应用: 瀑布流对于图片的展现,是高效而具有吸引力的,用户一眼扫过的快速阅读模式可以在短时间内获得更多的信息量,而瀑布流里懒加载模式又避免了用户鼠标点击的翻页操作,瀑布流的主要特性便是错落有致,定宽而不

一种瀑布流效果的实现

最近一个项目使用到了瀑布流效果,在这里总结一下.使用jquery框架. 最终效果: 思路: 使用五个并列的div:     首次加载n条数据:     之后由scroll触发ajax数据加载:     加载每条数据时,判断5个div的高度,把数据加载到高度最短的div里. 数据加载代码: $(document).bind('scroll',(function(){     //离底部100px时触发加载     var closeToBottom = ($(window).scrollTop()

RecyclerView实现瀑布流效果(二)

在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutManager.GridLayoutManager.StaggeredGridLayoutManager.其中StaggeredGridLayoutManager可实现交错式网格布局,正好可以用来实现瀑布流. 下面先看看效果图吧,再贴代码: 其中大部分内容实现其实是和上篇文章是一样的,就不多叙述了,就一个地方不同,就是我们在适配器中绑定ViewHolder的方法中需要重新给我们的itemVie

异步加载技术实现瀑布流效果

异步加载技术实现瀑布流效果.当滚动条到最底部的时候触发一个事件,这个事件写入$.get()事件,向内部程序页传递类别id和页码,程序将会返回那个类别下的相对页的产品列表,如果程序查询当前类无产品即返回空. 滚动条事件要写在window.onscroll中才有效判断.如下: window.onscroll=function(){ // var scrolltop=document.documentElement.scrollTop||document.body.scrollTop; var top