1. 程式人生 > >Android網格佈局實現--recyclerview

Android網格佈局實現--recyclerview

接上一篇內容,使用RecyclerView實現;

<android.support.v7.widget.RecyclerView
    android:id="@+id/rvGrid"
    android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_marginRight="30px"
    android:layout_marginTop="20px"
    android:layout_weight="1"

    android:splitMotionEvents="false" />

java程式碼:

     mPhotoWallRecyclerView.setLayoutManager(mSGLM);
        mPhotoWallRecyclerView.setHasFixedSize(true);
        mPhotoWallRecyclerView.addOnScrollListener(mOnScrollListener);


        mPhotoWallAdapter = new PhotoWallAdapter2(mCtx, null);
        mPhotoWallAdapter.setAddrCardListener(mAddrCardListener);
        // Set the RecyclerView's Adapter
        mPhotoWallRecyclerView.setAdapter(mPhotoWallAdapter);

介面卡程式碼

public class PhotoWallAdapter2 extends RecyclerView.Adapter<PhotoWallAdapter2.MyViewHolder> {

    private ArrayList<CardAddrItem> mDataset;
    private List<Integer> mHeights;
    private AddrCardListener mListener;
    private DisplayImageOptions options;

    public PhotoWallAdapter2(Context context, ArrayList<CardAddrItem> myDataset) {
        if 
(myDataset == null) this.mDataset = new ArrayList<CardAddrItem>(); else this.mDataset = myDataset; options = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) .bitmapConfig(Bitmap.Config.RGB_565) .build(); } public void getRandomHeight() { mHeights = new ArrayList<Integer>(); int min = 252; for (int i = 0; i < mDataset.size(); i++) { //隨機的獲取一個範圍為200-600直接的高度 String name = mDataset.get(i).getName(); int w = (name.length() + 1) * 24 + 36; int ww = Math.max(min, w); mHeights.add(ww); } } public void setAddrCardListener(AddrCardListener listener) { mListener = listener; } private void setAdapterListener(MyViewHolder holder) { if (mListener == null) return; if (holder.tvTitle.getVisibility() == View.GONE) { return; } holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyViewHolder holder = (MyViewHolder) v.getTag(); final int position = holder.getLayoutPosition(); notifyItemChanged(position); mListener.onAddrItemClick(position); } }); holder.itemView.setTag(holder); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // Create a new view by inflating the row item xml. final View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.photo_card_cell2, parent, false); MyViewHolder holder = new MyViewHolder(v); setAdapterListener(holder); return holder; } public void addData(List<CardAddrItem> datalist) { if ((datalist != null) && (datalist.size() > 0)) { mDataset.clear(); notifyDataSetChanged(); mDataset.addAll(getItemCount(), datalist); getRandomHeight(); notifyItemChanged(0); notifyDataSetChanged(); } } public ArrayList<CardAddrItem> getData() { return mDataset; } public CardAddrItem getItem(int position) { return (mDataset != null && position >= 0 && position < mDataset.size()) ? mDataset.get(position) : null; } @Override public int getItemCount() { return (mDataset == null) ? 0 : mDataset.size(); } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { CardAddrItem map = mDataset.get(position); holder.tvTitle.setText(map.getName().trim()); holder.tvTitle.setVisibility(View.VISIBLE); holder.tvAddress.setText(map.getAddress().trim()); holder.tvAddress.setVisibility(View.VISIBLE); String url = map.getUrl(); holder.ivPhoto.setTag(holder.spinner); holder.ivPhoto.setScaleType(ImageView.ScaleType.CENTER_CROP); ImageLoader.getInstance().displayImage(url, holder.ivPhoto, options, new SimpleImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { holder.spinner.setVisibility(View.VISIBLE); } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { String message = null; switch (failReason.getType()) { case IO_ERROR: message = "Input/Output error"; break; case DECODING_ERROR: message = "Image can't be decoded"; break; case NETWORK_DENIED: message = "Downloads are denied"; break; case OUT_OF_MEMORY: message = "Out Of Memory error"; break; case UNKNOWN: message = "Unknown error"; break; } Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show(); holder.spinner.setVisibility(View.GONE); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { holder.spinner.setVisibility(View.GONE); } }, new ImageLoadingProgressListener() { @Override public void onProgressUpdate(String imageUri, View view, int current, int total) { holder.spinner.setProgress(Math.round(100.0f * current / total)); } }); } /** * Create a ViewHolder to represent your cell layout * and data element structure */ public static class MyViewHolder extends RecyclerView.ViewHolder { ImageView ivPhoto; TextView tvTitle; TextView tvAddress; View llCardBack; ProgressBar spinner; public MyViewHolder(View itemView) { super(itemView); ivPhoto = (ImageView) itemView.findViewById(R.id.photo); tvTitle = (TextView) itemView.findViewById(R.id.tvTitle); tvAddress = (TextView) itemView.findViewById(R.id.tvAddress); llCardBack = itemView.findViewById(R.id.llCardBack); spinner = (ProgressBar) itemView.findViewById(R.id.loading); } } public interface AddrCardListener { void onAddrItemClick(int position); void onAddrNaviClick(int position); void onAddrCollClick(int position); }

相關推薦

Android網格佈局實現--recyclerview

接上一篇內容,使用RecyclerView實現;<android.support.v7.widget.RecyclerView    android:id="@+id/rvGrid"    android:layout_width="match_parent"    a

Android RecyclerView網格佈局的學習

最近用到 RecyclerView的網格佈局,簡單學習了一個Demo,效果如下 下面是程式碼 public class GridViewDemo extends AppCompatActivity { private RecyclerView recyclerView

RecyclerView實現標題-網格,標題-網格佈局

公司讓實現標題--網格,標題--網格的佈局,想來想去就用Recyclerview來實現了,說實話,中間休息了一段時間,recyclerview我用的並不多,為了工作,只能向前。。。後來在網上也是各種扒資料,最終實現了效果,雖然效果實現了,但是裡面還有些地方是自己不太明白的,特

使用Recyclerview實現線性佈局網格佈局資料展示

         效果實現圖使用的依賴和許可權implementation 'com.facebook.fresco:fresco:0.12.0' implementation 'com.squareup.okhttp3:okhttp:3.4.2' implementatio

Android TV橫向滾動網格佈局——RecyclerView的使用

最近在做一個Android盒子的專案,主要是Launcher有一個橫向滾動的介面。主要使用的是RecyclerView。總結一下。 一、先了解下RecyclerView RecyclerView是類似於ListView、GridView的一種Adap

Android實現RecyclerView的下拉刷新和上拉載入很多其它

listen gre scheme void fadein 有一個 hot [] study 需求 先上效果圖, Material Design風格的下拉刷新和上拉載入很多其它。 源代碼地址(歡迎star) https://github.com

android 使用TableLayout 實現佈局自動拉伸寬度 LinearLayout中元素按比例分配寬度

TableLayout 實現佈局自動拉伸寬度  <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:

Android Studio 相對佈局/網格佈局

1. 相對佈局(RelativeLayout) 1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的,因此叫相對佈局 1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件       如果A元件位置是由

Android ListView不同的item佈局實現

類似與這個 聊天效果 和 進入直播間 注意 在使用不同佈局的時候,在介面卡中 getItemViewType和getViewTypeCount不能少,一般的同一種item的列表是不用這兩個函式的過載的,但是如果需要不同種類的item,就必須過載這兩個

Android網格佈局

網格佈局GridLayout 1.常用屬性rowCount(行數)、columnCount(列數)  GridLayout中子控制元件相關屬性:layout_gravity="fill_horizontal(水平填充)|fill_vertical(垂直填充)"   &

Android佈局網格佈局

1. 什麼是佈局    就是把介面中的控制元件按照某種規律擺放到指定的位置 2. 佈局的二種實現    程式碼    xml配置檔案:res/layout目錄下      注:也可以同時使用xml和程式

Android相對佈局網格佈局

案例一:相對佈局 相對佈局(重點) 1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的,因此叫相對佈局 1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件 注1:注意XML中元件的順序,不然會報錯 注2:

android的相對佈局網格佈局

案例一:相對佈局 相對佈局(重點) 1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的,因此叫相對佈局 1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件 如果A元件位置是由B元件的位置決定的,Android要求先定

Android 實現輪播圖效果 底部圓點佈局實現

1、準備底部圓點的素材、利用Drawable的功能,去實現一個圓點圖片的展示 drawable下新建兩個Drawable resource file:dot_normal.xml和dot_select.xml dot_normal.xml <?xml vers

Android 應用開發(50)---GridLayout(網格佈局)

GridLayout(網格佈局) 今天要介紹的佈局是Android 4.0以後引入的一個新的佈局,和前面所學的TableLayout(表格佈局) 有點類似,不過他有很多前者沒有的東西,也更加好用, 可以自己設定佈局中元件的排列方式 可以自定義網格佈局有多少行,多少

Android 控制元件之 RecyclerView(一)—— 載入檢視和佈局選擇

本文目錄 一、概述 二、列表檢視的處理 1. item 的佈局檔案 2. 構造 Adapter 類 3. 佈局管理器 1)LinearLayoutManager 2)GridLayoutManager

Recylerview網格佈局分割線的實現,列表四周也有分割線

關於RecylerView分割線的問題,當佈局形式為線性佈局LinearLayoutManager的時候, 官方提供了一個定義好的分割線類DividerItemDecoration,但是當佈局形式為網格佈局GridLayoutManager的時候,官方沒有提供分割線的相關類,

Android佈局2(相對佈局網格佈局

1. 相對佈局(RelativeLayout 重點:)   1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的(就是根據旁邊的足跡來設定位置),因此叫相對佈局   1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件  

OkHttp網路獲取資料通過RecycleView展示,實現ListView,GridView(網格佈局),瀑布流效果展示

因為涉及到網路請求資料 那麼首先我們先要在清單檔案 新增網路許可權,已經註冊MyApp(設定圖片的自定義類,需要註冊) <uses-permission android:name="android.permission.INTERNET"/>

Android 自定義控制元件:打造流佈局實現熱門搜尋標籤

具體實現 1,自定義一個類繼承GridView /** * 自定義流佈局 * @author zhouyou */ public class ZFlowLayout extends ViewGroup{ // 儲存所有子View priva