安卓StepView事件进度条的简单实现
生活随笔
收集整理的這篇文章主要介紹了
安卓StepView事件进度条的简单实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
需求
1.豎向展示事件列表
2.每個事件包含詳情內(nèi)容時可進行展開折疊
3.默認展開最后一級別有內(nèi)容的列表
既然說簡單實現(xiàn)。那么用RecyclerView實現(xiàn)吧
1.item布局,這里可以把一個個item分割為以下部分
我們這里可以利用recyclerview默認不帶分割線的特點,最左側(cè)的進度線就分割成兩條線跟一個圖片。右邊展開折疊只是顯示隱藏布局。展開的布局比較簡單就是一個文本加上一個recyclerview展示圖文。
看一下布局代碼吧
布局OK那么接下來就是實體類的設(shè)計啦。這個得根據(jù)自己的業(yè)務(wù)處理咯
public static class RDataBean extends BaseEntity {/*** im_feedback_dispose_id : 1* im_feedback_id : 3* user_id : 27233218* group_sys_name : 小隊1* duty_name :* dispose_content : blend咯lol* imgs : ["imgs/1511775047258.png"]* submit_status : 0* inittime : 1511775047* dispose_status : 1* user_name : 李基旺*/private String im_feedback_dispose_id;private String im_feedback_id;private String user_id;private String group_sys_name;private String duty_name;private String dispose_content;private String submit_status;private String inittime;private String dispose_status;private String user_name;private boolean expand = false;//判斷是否展開private String telphone;//: "",private String user_sf;//: "",private String user_head_img;//: ""private String nameDuty;public String getNameDuty() {if(!TextUtils.isEmpty(duty_name)&&!TextUtils.isEmpty(user_name)){return "--"+user_name + "(" + duty_name + ")";}else {if(TextUtils.isEmpty(user_name)){return "";}else {return "--"+user_name;}}}public void setNameDuty(String nameDuty) {this.nameDuty = nameDuty;}public String getTelphone() {return telphone;}public void setTelphone(String telphone) {this.telphone = telphone;}public String getUser_sf() {return user_sf;}public void setUser_sf(String user_sf) {this.user_sf = user_sf;}public String getUser_head_img() {return user_head_img;}public void setUser_head_img(String user_head_img) {this.user_head_img = user_head_img;}public boolean isExpand() {return expand;}public void setExpand(boolean expand) {this.expand = expand;}private List<String> imgs;public String getIm_feedback_dispose_id() {return im_feedback_dispose_id;}public void setIm_feedback_dispose_id(String im_feedback_dispose_id) {this.im_feedback_dispose_id = im_feedback_dispose_id;}public String getIm_feedback_id() {return im_feedback_id;}public void setIm_feedback_id(String im_feedback_id) {this.im_feedback_id = im_feedback_id;}public String getUser_id() {return user_id;}public void setUser_id(String user_id) {this.user_id = user_id;}public String getGroup_sys_name() {return group_sys_name;}public void setGroup_sys_name(String group_sys_name) {this.group_sys_name = group_sys_name;}public String getDuty_name() {return duty_name;}public void setDuty_name(String duty_name) {this.duty_name = duty_name;}public String getDispose_content() {return dispose_content;}public void setDispose_content(String dispose_content) {this.dispose_content = dispose_content;}public String getSubmit_status() {return submit_status;}public void setSubmit_status(String submit_status) {this.submit_status = submit_status;}public String getInittime() {return inittime;}public void setInittime(String inittime) {this.inittime = inittime;}public String getDispose_status() {return dispose_status;}public void setDispose_status(String dispose_status) {this.dispose_status = dispose_status;}public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}public List<String> getImgs() {return imgs;}public void setImgs(List<String> imgs) {this.imgs = imgs;}}給個思路吧,每個item都有三條進度線,我們在適配器中主要的工作就是判斷這個線的顏色跟是否隱藏。然后就是點擊事件,點擊事件的話這里用了第三的開源庫適配器寫法相對簡單。CymChad:BaseRecyclerViewAdapterHelper
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.17'直接看代碼:
import android.content.Intent; import android.graphics.Color; import android.support.annotation.LayoutRes; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast;import com.bumptech.glide.Glide; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import com.fjrcloud.fuqing.R; import com.fjrcloud.fuqing.model.local.ChatAskList; import com.fjrcloud.fuqing.ui.activity.PicViewerActivity; import com.fjrcloud.fuqing.util.Constants; import com.fjrcloud.fuqing.util.DateUtil;import java.util.ArrayList; import java.util.List;/*** Created by Liberation on 2017/11/13.*/public class ChatTaskAskDetailAdapter extends BaseQuickAdapter<ChatAskList.RDataBean, BaseViewHolder> {public ChatTaskAskDetailAdapter(@LayoutRes int layoutResId, @Nullable List<ChatAskList.RDataBean> data) {super(layoutResId, data);}@Overrideprotected void convert(BaseViewHolder helper, final ChatAskList.RDataBean item) {/*獲取到item的子布局*/ImageView mHead = helper.getView(R.id.iv_head);//用戶頭像。這里用RoundedImageView加Glide加載LinearLayout mLl = helper.getView(R.id.ll_content);//展開的內(nèi)容,需要對他進行展開折疊處理ImageView mIvStatus = helper.getView(R.id.iv_status);//最左側(cè)進度條的狀態(tài)實心或者空心ImageView mIvExpand = helper.getView(R.id.iv_arrow);//最右側(cè)的展開縮合狀態(tài),這個要根據(jù)是否有內(nèi)容進行顯示或者隱藏TextView mTvNumber = helper.getView(R.id.tv_number);//小隊編號//設(shè)置當前條目的展開縮合狀態(tài)if (item.isExpand()) {mIvExpand.setImageResource(R.mipmap.arrow_down);mLl.setVisibility(View.VISIBLE);} else {mLl.setVisibility(View.GONE);mIvExpand.setImageResource(R.mipmap.arrow_right);}//根據(jù)當前條目錄的內(nèi)容是否為空判斷是否顯示展開按鈕mIvExpand.setVisibility(TextUtils.isEmpty(item.getDispose_content()) ? View.INVISIBLE : View.VISIBLE);//列表的第一條不顯示第一條線更美觀些helper.getView(R.id.tv_line1).setVisibility(helper.getAdapterPosition() == 1 ? View.GONE : View.VISIBLE);//當列表數(shù)據(jù)只有一條并且沒有內(nèi)容 第二條線也隱藏helper.getView(R.id.tv_line2).setVisibility(getData().size() == 1 && !item.isExpand() ? View.GONE : View.VISIBLE);//默認顯示第一條的電話按鈕helper.getView(R.id.iv_call).setVisibility((helper.getAdapterPosition() == 1 ? View.VISIBLE : View.GONE));//最后一個item的只有上半部分的線為紅色if (helper.getAdapterPosition() == mData.size()) {helper.getView(R.id.tv_line1).setBackgroundColor(Color.parseColor("#ff0000"));helper.getView(R.id.tv_line2).setBackgroundColor(Color.parseColor("#55ff0000"));helper.getView(R.id.tv_line3).setBackgroundColor(Color.parseColor("#55ff0000"));} else {helper.getView(R.id.tv_line1).setBackgroundColor(Color.parseColor("#ff0000"));helper.getView(R.id.tv_line2).setBackgroundColor(Color.parseColor("#ff0000"));helper.getView(R.id.tv_line3).setBackgroundColor(Color.parseColor("#ff0000"));}/*任務(wù)結(jié)束狀態(tài)所有線的顏色都變成紅色*/if (item.getDispose_status().equals("2")) {helper.getView(R.id.tv_line1).setBackgroundColor(Color.parseColor("#ff0000"));helper.getView(R.id.tv_line2).setBackgroundColor(Color.parseColor("#ff0000"));helper.getView(R.id.tv_line3).setBackgroundColor(Color.parseColor("#ff0000"));}//設(shè)置左側(cè)空心實心狀態(tài)mIvStatus.setImageResource(TextUtils.isEmpty(item.getDispose_content()) ? R.mipmap.icon_none : R.mipmap.icon_done);//設(shè)置展開內(nèi)容helper.setText(R.id.tv_content, item.getDispose_content() + "");ImageAdapter imageAdapter = new ImageAdapter(R.layout.item_image, item.getImgs());final RecyclerView recyclerView = helper.getView(R.id.rv);LinearLayoutManager linearLayoutManager = new LinearLayoutManager(recyclerView.getContext());linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);recyclerView.setLayoutManager(linearLayoutManager);recyclerView.setAdapter(imageAdapter);imageAdapter.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(BaseQuickAdapter adapter, View view, int position) {/*跳轉(zhuǎn)到圖片查看頁面*/ArrayList<String> imgs = new ArrayList<String>();if (item.getImgs().size() > 0) {Intent intent = new Intent(recyclerView.getContext(), PicViewerActivity.class);for (int i = 0; i < item.getImgs().size(); i++) {imgs.add(item.getImgs().get(i));}intent.putStringArrayListExtra("imgs", imgs).putExtra("time", DateUtil.getDateToString4(Long.valueOf(item.getInittime() + "000")));recyclerView.getContext().startActivity(intent);} else {Toast.makeText(recyclerView.getContext(), "暫無圖片可瀏覽", Toast.LENGTH_SHORT).show();}}});/*這里文字過長做了跑馬燈滾動展示效果*/helper.setText(R.id.tv_time, DateUtil.getDateToString4(Long.valueOf(item.getInittime() + "000")));mTvNumber.setText(item.getGroup_sys_name() + item.getNameDuty());mTvNumber.setEllipsize(TextUtils.TruncateAt.MARQUEE);mTvNumber.setSingleLine(true);mTvNumber.setSelected(true);mTvNumber.setFocusable(true);mTvNumber.setFocusableInTouchMode(true);mTvNumber.setMarqueeRepeatLimit(-1);//Glide加載用戶頭像Glide.with(mHead.getContext()).load(Constants.SERVICE_HOST_PIC + item.getUser_head_img()).error(R.mipmap.app_logo_fq).into(mHead);//下面根據(jù)你實際的業(yè)務(wù)顯示文字狀態(tài)String notice = "處理中";//回復(fù)中的提示文本if (!TextUtils.isEmpty(item.getDispose_content())) notice = "已處理";if (item.getUser_id().equals(Constants.USER_ID)) {notice = TextUtils.isEmpty(item.getDispose_content()) ? "處理中" : "已處理";}if (item.getDispose_status().equals("2")) notice = "已處理";if (!item.getSubmit_status().equals("0")) notice = "已處理-上報";helper.setText(R.id.tv_status, notice);if (!TextUtils.isEmpty(item.getDispose_content())) {helper.addOnClickListener(R.id.ll_right);}helper.addOnClickListener(R.id.iv_call);} }注釋的差不多了。。。。希望能有所幫助。
總結(jié)
以上是生活随笔為你收集整理的安卓StepView事件进度条的简单实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu16.04 耳机没声音解决办
- 下一篇: 证券从业人员跌破33万,过去一年减少2.