1. 程式人生 > >android朋友圈評論功能相容沉浸式狀態列,九宮格圖片顯示

android朋友圈評論功能相容沉浸式狀態列,九宮格圖片顯示

android朋友圈評論功能,沉浸式狀態列,九宮格圖片顯示器,上拉載入下拉重新整理功能,可直接用到專案中

背景

在前兩個專案開發過程中用到了朋友圈這個功能,包含了評論回覆、九宮格圖片及大圖展示展示,上拉載入下拉重新整理,RecyclerView和第三方封裝的萬能介面卡,自己根據使用情況,做了一下總結,功能有:

  1. 評論功能,沉浸式與軟鍵盤評論框佈局的完美顯示,評論佈局緊貼item下方顯示
  2. 九宮格圖片展示採用第三方 BGAPhotoPicker-Android
  3. RecyclerView與第三方萬能介面卡 BaseRecyclerViewAdapterHelper
  4. retrofit2與rxjava封裝請求資料
  5. 表情與字串間的轉換

效果圖

這裡寫圖片描述

朋友圈評論回覆功能

評論佈局採用NoTouchLinearLayout:

/**
* 可以監聽返回鍵點選事件的LinearLayout(解決了第一次點選返回按鈕只隱藏鍵盤的問題)
*/

   public class NoTouchLinearLayout extends LinearLayout {
    public NoTouchLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    public NoTouchLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public NoTouchLinearLayout(Context context) {
        super(context);
    }
    private OnResizeListener mListener;

    public interface OnResizeListener {
        void OnResize();
    }
    public void setOnResizeListener(OnResizeListener l) {
        mListener = l;
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return true;
    }
    //返回鍵監聽,點選返回按鈕,鍵盤和該佈局同時隱藏(解決了第一次點選返回按鈕只隱藏鍵盤的問題)
    @Override
    public boolean dispatchKeyEventPreIme(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            mListener.OnResize();
            return true;
        }
        return super.dispatchKeyEventPreIme(event);
        }
}

評論列表採用IRecyclerView:

繼承自RecyclerView,作用是:在mainfest裡設定 Android:windowSoftInputMode=”adjustResize”,軟體盤彈出隱藏時改變佈局的大小,即onSizeChanged()方法會被呼叫。用來監聽RecyclerView佈局改變,控制評論佈局的顯示與隱藏
public class IRecyclerView extends RecyclerView {

    public interface OnSizeChangedListener {
        public void onSizeChanged();
    }

    private OnSizeChangedListener onSizeChangedListener;

    public void setOnSizeChangedListener(OnSizeChangedListener onSizeChangedListener) {
        this.onSizeChangedListener = onSizeChangedListener;
    }

    public IRecyclerView(Context context) {
        super(context);
    }

    public IRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public IRecyclerView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        if (onSizeChangedListener != null) {
            onSizeChangedListener.onSizeChanged();
        }
    }
}

點選item的評論圖示時 記錄item的位置級父佈局的高度,用來確定鍵盤彈出時,RecyclerView停留的位置,使評論佈局剛好顯示在當前item下方:

這裡寫圖片描述

   helper.setOnClickListener(R.id.CommentImageView, new View.OnClickListener() {
                                        @Override
                                        public void onClick(View view) {
                                            //獲取點選的那個Item的高度
                                            position = helper.getPosition();//記錄點選的位置
                                            isReply = false;
                                            mCommentEditText.setHint("評論" + item.getUser().getNickName() + ":");
                                            viewHeight = ((View) view.getParent().getParent()).getHeight();//獲取當前View父佈局的父佈局高度
                                            showCommentLayout();
                                        }
                                    });

佈局大小變動後,設定RecyclerViewList要滑動停留的位置

 //佈局大小變動後,執行的方法
    @Override
    public void onSizeChanged() {
        linearLayoutManager.scrollToPositionWithOffset(position, mRecyclerViewList.getBottom() - viewHeight);//計算鍵盤彈出時  mRecyclerViewList要滑動停留的位置
    }

其中要實現的介面

public class CricleFragemnt extends BaseFragment implements IRecyclerView.OnSizeChangedListener, BaseQuickAdapter.RequestLoadMoreListener, SwipeRefreshLayout.OnRefreshListener,
        EasyPermissions.PermissionCallbacks, BGANinePhotoLayout.Delegate{

        }

實現的介面作用
IRecyclerView.OnSizeChangedListener:監聽RecyclerView佈局變化
BaseQuickAdapter.RequestLoadMoreListener:BaseQuickAdapter介面卡上拉載入更多監聽
SwipeRefreshLayout.OnRefreshListener:android系統自帶下拉重新整理
EasyPermissions.PermissionCallbacks:簡單易懂的第三方SDK可以簡化許可權管理。本專案大圖預覽時用到
BGANinePhotoLayout.Delegate:實現九宮格大圖檢視功能

演示Apk下載

http://oor5869gg.bkt.clouddn.com/app-debug.apk

程式碼下載

http://download.csdn.net/detail/ming_ruo_xiao_xi/9908838

目前只總結了這麼多功能,有空了準備加入評論表情和其它功能,歡迎關注