RecyclerView的简单瀑布流效果
2016-10-10 21:23
239 查看
主界面布局….
<android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" />
adapter的item布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/icon" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@mipmap/a" android:scaleType="fitXY"/> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="50dp" android:background="@android:color/holo_orange_light" android:gravity="center" android:textSize="18sp"/> </LinearLayout>
先来写写recyclerview的adapter,点击事件必须自己设置接口了,很蛋疼
package com.example.administrator.recyclerview; 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.TextView; import java.util.List; /** * Created by Administrator on 2016/10/10 0010. */ public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { private Context context; private List<String> mList; public MyRecyclerAdapter(Context context, List<String> mList) { this.context = context; this.mList = mList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // View mView = View.inflate(context, R.layout.item, null); View mView = LayoutInflater.from(context).inflate(R.layout.item, parent, false); MyViewHolder mMyViewHolder = new MyViewHolder(mView); return mMyViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { final String str = mList.get(position); holder.mTextView.setText(str); holder.mTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mTextViewOnClickLisenter != null) { mTextViewOnClickLisenter.textViewclick(str); } } }); if (position%2==0){ holder.mImageView.setBackgroundResource(R.mipmap.e); }else{ holder.mImageView.setBackgroundResource(R.mipmap.b); } } @Override public int getItemCount() { return mList == null ? 0 : mList.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private TextView mTextView; private ImageView mImageView; public MyViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.tv); mImageView =(ImageView)itemView.findViewById(R.id.icon); } } private TextViewOnClickLisenter mTextViewOnClickLisenter; public void setTextViewOnClickLisenter(TextViewOnClickLisenter l) { mTextViewOnClickLisenter = l; } public interface TextViewOnClickLisenter { void textViewclick(String str); } }
设置分割线,这是洪洋大婶的…
package com.example.administrator.recyclerview; /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; /** * This class is from the v7 samples of the Android SDK. It's not by me! * <p/> * See the license above for details. */ public class DividerItemDecoration extends RecyclerView.ItemDecoration { private static final int[] ATTRS = new int[] { android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; private int mOrientation; public DividerItemDecoration(Context context, int orientation) { final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } public void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { throw new IllegalArgumentException("invalid orientation"); } mOrientation = orientation; } @Override public void onDraw(Canvas c, RecyclerView parent) { Log.v("recyclerview - itemdecoration", "onDraw()"); if (mOrientation == VERTICAL_LIST) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } public void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); RecyclerView v = new RecyclerView( parent.getContext()); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } public void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin; final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { if (mOrientation == VERTICAL_LIST) { outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } } }
主界面,over
package com.example.administrator.recyclerview; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements MyRecyclerAdapter.TextViewOnClickLisenter { private RecyclerView mRecyclerView; private ArrayList<String> mList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initEvent(); } private void initEvent() { MyRecyclerAdapter myRecyclerAdapter = new MyRecyclerAdapter(this, mList); mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); mRecyclerView.addItemDecoration(new DividerGridItemDecoration(this)); mRecyclerView.setAdapter(myRecyclerAdapter); myRecyclerAdapter.setTextViewOnClickLisenter(this); } private void initData() { mList = new ArrayList<>(); for (int i = 0; i < 50; i++) { mList.add("照片" + i); } } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.rv); } @Override public void textViewclick(String str) { Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); } }
相关文章推荐
- RecyclerView的简单使用以及实现瀑布流效果
- RecyclerView 实现瀑布流效果
- [置顶] 利用RecyclerView实现瀑布流效果
- 使用RecyclerView实现瀑布流的效果
- RecyclerView瀑布流的简单实现
- Android RecyclerView (二)初学,实现GridView列表和瀑布流效果。
- RecyclerView实现瀑布流效果(图文详解+源码奉送)
- RecyclerView 实现瀑布流交错效果,并使最后一行子View高度占满RecyclerView
- Android手把手教你实现卡片式瀑布流效果(RecyclerView+CardView,附源码)
- Android RecyclerView详解之实现 ListView GridView瀑布流效果
- Android开发之实现瀑布流效果(RecyclerView)
- RecyclerView实现瀑布流效果(图文详解+源码奉送)
- Android中使用RecyclerView和CardView实现瀑布流效果(StaggeredGrid)
- 使用RecyclerView 简单实现QQ好友列表展开效果
- RecyclerView实现瀑布流效果(二)
- RecyclerView实现瀑布流效果(图文详解+源码奉送)
- 实现RecyclerView下拉刷新和上拉加载更多以及RecyclerView线性、网格、瀑布流效果演示
- (4.1.11.1)Android中使用RecyclerView和CardView实现瀑布流效果(StaggeredGrid)
- RecyclerView的Item点击事件,增加删除Item瀑布流动画效果,长按拖动Item,RecyclerView复杂布局、实现新闻频道选择器
- RecyclerView--实现 ListView,GridView,瀑布流 效果