折叠式答题样式

先看看实现的效果
这里写图片描述

实现的效果说明:
答题区域始终在底部,每答一道题就向上添加一个折叠的样式;点击折叠的样式可以对该题进行修改,选中答案就折叠起来,如果,没有选答案,而去选择其他的题进行修改,也将刚才的那个折叠起来,也就是说最多可以有两个折叠的样式存在,点击下面新答的题,注意不是修改题,则折叠上面的所有。

直接上代码吧,讲解都在注释中

public class FoldTestActivity extends AppCompatActivity {

    private ScrollView mScrollView;
    private LinearLayout mContentLinearView;
    private TextView mAnsweredQuestionCountView;
    private TextView mSubmitView;
    private LinearLayout mBtnLinearView;
    private RelativeLayout mBottomRelativeView;
    private TextView mNoneView;
    private TextView mLittleView;
    private TextView mSomeView;
    private TextView mOftenView;
    private TextView mAlwaysView;
    private TextView mQuestionView;
    private View mItemView;

    private List<String> lists;
    private Map<String,String> answers;
    private boolean isItemHadOpen;//是否已经存在一个待修改状态(open状态)的item
    private int itemQuestion;//点击修改的条目,主要是记录上次的那个,然后将其关闭

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fold_test);

        initViews();
        initDatas();
        initListeners();
    }

    private void initViews() {
        mScrollView = (ScrollView) findViewById(R.id.scrollView);
        mContentLinearView = (LinearLayout) findViewById(R.id.linear_content);
        mAnsweredQuestionCountView = (TextView) findViewById(R.id.count_question_already_answer);
        mSubmitView = (TextView) findViewById(R.id.submit_test);
        mBottomRelativeView = (RelativeLayout) findViewById(R.id.bottom_view);
        mBtnLinearView = (LinearLayout) findViewById(R.id.btn_linear);
        mQuestionView = (TextView) findViewById(R.id.text_question);
        mNoneView = (TextView) findViewById(R.id.btn_none);
        mLittleView = (TextView) findViewById(R.id.btn_little);
        mSomeView = (TextView) findViewById(R.id.btn_some);
        mOftenView = (TextView) findViewById(R.id.btn_often);
        mAlwaysView = (TextView) findViewById(R.id.btn_always);

    }

    private void initDatas() {
        lists = new ArrayList<>();
        answers = new HashMap<>();
        for(int i = 0;i<20;i++){
            lists.add("经常吃的多吗?");
        }

        mAnsweredQuestionCountView.setText(0 + "/" + lists.size());
        mQuestionView.setText((1) + "." + lists.get(0));

    }

    private void initListeners() {
        mNoneView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setTag(0);
                changeBtnStatus((TextView) v);

            }
        });

        mLittleView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setTag(1);
                changeBtnStatus((TextView) v);
            }
        });

        mSomeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setTag(2);
                changeBtnStatus((TextView) v);
            }
        });

        mOftenView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setTag(3);
                changeBtnStatus((TextView) v);
            }
        });

        mAlwaysView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setTag(4);
                changeBtnStatus((TextView) v);
            }
        });

        mSubmitView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //TODO 提交答案
            }
        });
    }

    private void changeBtnStatus(final TextView currentView) {

        final int currentQuestion = mContentLinearView.getChildCount() - 2;

        //记录答案

        /*
        //answers是list时
        answers.add(new BaseInfo(lists.get(currentQuestion - 1).getId(), lists.get(currentQuestion - 1).getAnswers().get(Integer.parseInt(v.getTag().toString())).getId()));*/

        answers.put((currentQuestion-1)+"","答案");

        //点击一个准备修改,没有选答案,直接继续答题,在这里将那个准备选的折叠

        if (isItemHadOpen) {//存在一个已经处于修改状态的Item
            mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.layout_item).setVisibility(View.VISIBLE);
            mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.bottom_view).setVisibility(View.GONE);
        }

        //答题进度
        mAnsweredQuestionCountView.setText(currentQuestion + "/" + lists.size());

        for (int i = 0; i < mBtnLinearView.getChildCount(); i++) {
            if (mBtnLinearView.getChildAt(i) instanceof TextView) {
                mBtnLinearView.getChildAt(i).setBackgroundResource(R.drawable.btn_bg_self_test_can_click);
                ((TextView) mBtnLinearView.getChildAt(i)).setTextColor(getResources().getColor(R.color.color_3183e9));
            } else {
                continue;
            }
        }

        currentView.setTextColor(getResources().getColor(R.color.color_ffffff));
        currentView.setBackgroundResource(R.drawable.btn_bg_self_test_select);

        mItemView = LayoutInflater.from(FoldTestActivity.this).inflate(R.layout.layout_item_test_question, null, false);

        final LinearLayout flodView = (LinearLayout) mItemView.findViewById(R.id.layout_item);
        flodView.setTag(currentQuestion);
        final RelativeLayout openView = (RelativeLayout) mItemView.findViewById(R.id.bottom_view);

        //修改已经答过的题
        flodView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //点击了一个准备修改,没有选答案继续点下一个要修改的情况,在这里折叠上一个
                if (isItemHadOpen) {//存在一个已经处于修改状态的Item
                    mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.layout_item).setVisibility(View.VISIBLE);
                    mContentLinearView.getChildAt(itemQuestion).findViewById(R.id.bottom_view).setVisibility(View.GONE);
                }

                isItemHadOpen = true;
                itemQuestion = currentQuestion;
//                Log.e("------------>", "item click" + isItemHadOpen + "itemQuestion" + itemQuestion);

                //点击已经答过的题,展开进行修改
                flodView.setVisibility(View.GONE);
                openView.setVisibility(View.VISIBLE);

                //展开后题目
                int currentItemId = Integer.parseInt(flodView.getTag().toString());
                ((TextView) (openView.findViewById(R.id.text_question_open))).setText(currentItemId + "." + lists.get(currentItemId - 1));

                //展开后显示选中的答案
                TextView textView = null;
                switch (Integer.parseInt(flodView.findViewById(R.id.text_answer).getTag().toString())) {
                    case 0:
                        textView = (TextView) openView.findViewById(R.id.btn_none);
                        break;
                    case 1:
                        textView = (TextView) openView.findViewById(R.id.btn_little);

                        break;
                    case 2:
                        textView = (TextView) openView.findViewById(R.id.btn_some);

                        break;
                    case 3:
                        textView = (TextView) openView.findViewById(R.id.btn_often);

                        break;
                    case 4:
                        textView = (TextView) openView.findViewById(R.id.btn_always);

                        break;
                }

                textView.setBackgroundResource(R.drawable.btn_bg_self_test_select);
                textView.setTextColor(getResources().getColor(R.color.color_ffffff));

                //每个button答案添加点击事件
                final LinearLayout btnLinear = (LinearLayout) openView.findViewById(R.id.btn_linear);
                final List<TextView> btns = new ArrayList<TextView>();
                for (int i = 0; i < btnLinear.getChildCount(); i++) {
                    if (btnLinear.getChildAt(i) instanceof TextView) {
                        btns.add((TextView) btnLinear.getChildAt(i));
                        btnLinear.getChildAt(i).setTag(btns.size() - 1);
                        btnLinear.getChildAt(i).setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                for (int j = 0; j < btns.size(); j++) {
                                    btns.get(j).setBackgroundResource(R.drawable.btn_bg_self_test_can_click);
                                    btns.get(j).setTextColor(getResources().getColor(R.color.color_3183e9));
                                }

                                //修改完答案后将展开的View折叠
                                flodView.setVisibility(View.VISIBLE);
                                openView.setVisibility(View.GONE);

                                //修改折叠起来时显示的答案
                                ((TextView) flodView.findViewById(R.id.text_answer)).setText(((TextView) v).getText());
                                ((TextView) (flodView.findViewById(R.id.text_answer))).setTag(v.getTag());

                                //记录答案 题号从1开始,答案从0开始,使用list存储答案,修改时要记得移除之前的那个答案,否则会出错
//                                answers.remove(currentQuestion-1);
//                                answers.add(new BaseInfo(lists.get(currentQuestion - 1).getId(), lists.get(currentQuestion - 1).getAnswers().get(Integer.parseInt(v.getTag().toString())).getId()));

                                answers.put((currentQuestion-1)+"","答案");
                                isItemHadOpen = false;

                            }
                        });
                    } else {
                        continue;
                    }
                }

            }
        });

        //每答一个题就添加一个折叠样式的View
        mContentLinearView.addView(mItemView, currentQuestion);

        ((TextView) (mItemView.findViewById(R.id.text_question))).setText(currentQuestion + "." + lists.get(currentQuestion - 1));
        ((TextView) (mItemView.findViewById(R.id.text_answer))).setText(currentView.getText());
        mItemView.findViewById(R.id.text_answer).setTag(currentView.getTag());

        mScrollView.postDelayed(new Runnable() {
            @Override
            public void run() {
                mScrollView.fullScroll(View.FOCUS_DOWN);
            }
        }, 30);

//        Log.e("-------------->", "currentQuestion" + currentQuestion + ",size" + lists.size());
        if (currentQuestion >= lists.size()) {
            mSubmitView.setVisibility(View.VISIBLE);
            mBottomRelativeView.setVisibility(View.GONE);
        } else {
            mQuestionView.setText((currentQuestion + 1) + "." + lists.get(currentQuestion));
            //将答题的View重新至位
            for (int i = 0; i < mBtnLinearView.getChildCount(); i++) {
                if (mBtnLinearView.getChildAt(i) instanceof TextView) {
                    mBtnLinearView.getChildAt(i).setBackgroundResource(R.drawable.btn_bg_self_test_can_click);
                    ((TextView) mBtnLinearView.getChildAt(i)).setTextColor(getResources().getColor(R.color.color_3183e9));
                } else {
                    continue;
                }
            }

        }

    }

activity布局activity_fold_test

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_fold_test"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.trtpre.www.demo.activitys.FoldTestActivity">

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:id="@+id/linear_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="300dp"
                    android:background="@color/color_3183e9"
                    android:text="一些其他的View"
                    android:gravity="center"/>
            </LinearLayout>

            <RelativeLayout
                android:id="@+id/bottom_view"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:layout_alignParentBottom="true"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:background="@drawable/bg_self_test"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/text_question"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="14dp"
                    android:layout_marginRight="14dp"
                    android:layout_marginTop="24dp"
                    android:lineSpacingExtra="5dp"
                    android:text="1、你的脸比别人大吗"
                    android:textColor="@color/color_3183e9" />

                <LinearLayout
                    android:id="@+id/btn_linear"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="70dp"
                    android:gravity="center"
                    android:orientation="horizontal">

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="50dp"
                        android:layout_weight="1" />

                    <TextView
                        android:id="@+id/btn_none"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:background="@drawable/btn_bg_self_test_can_click"
                        android:clickable="true"
                        android:gravity="center"
                        android:text="没有"
                        android:textColor="@color/color_3183e9"
                        android:textSize="14sp" />

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="50dp"
                        android:layout_weight="1" />

                    <TextView
                        android:id="@+id/btn_little"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:background="@drawable/btn_bg_self_test_can_click"
                        android:clickable="true"
                        android:gravity="center"
                        android:text="很少"
                        android:textColor="@color/color_3183e9"
                        android:textSize="14sp" />

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="50dp"
                        android:layout_weight="1" />

                    <TextView
                        android:id="@+id/btn_some"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:background="@drawable/btn_bg_self_test_can_click"
                        android:clickable="true"
                        android:gravity="center"
                        android:text="有时"
                        android:textColor="@color/color_3183e9"
                        android:textSize="14sp" />

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="50dp"
                        android:layout_weight="1" />

                    <TextView
                        android:id="@+id/btn_often"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:background="@drawable/btn_bg_self_test_can_click"
                        android:clickable="true"
                        android:gravity="center"
                        android:text="经常"
                        android:textColor="@color/color_3183e9"
                        android:textSize="14sp" />

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="50dp"
                        android:layout_weight="1" />

                    <TextView
                        android:id="@+id/btn_always"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:background="@drawable/btn_bg_self_test_can_click"
                        android:clickable="true"
                        android:gravity="center"
                        android:text="总是"
                        android:textColor="@color/color_3183e9"
                        android:textSize="14sp" />

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="50dp"
                        android:layout_weight="1" />
                </LinearLayout>

                <TextView
                    android:id="@+id/count_question_already_answer"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="20dp"
                    android:gravity="center"
                    android:text="1/60" />

            </RelativeLayout>

            <TextView
                android:id="@+id/submit_test"
                android:layout_width="280dp"
                android:layout_height="45dp"
                android:layout_gravity="center"
                android:layout_marginBottom="60dp"
                android:layout_marginLeft="49dp"
                android:layout_marginRight="49dp"
                android:layout_marginTop="50dp"
                android:background="@drawable/bg_btn_submit_test_select"
                android:gravity="center"
                android:text="提交"
                android:textColor="@color/color_ffffff"
                android:textSize="16sp"
                android:visibility="gone"/>
        </LinearLayout>
    </ScrollView>

</RelativeLayout>

每个条目的布局layout_item_test_question

<?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="horizontal"
    android:paddingBottom="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:background="@color/color_f5f5f5">

    <LinearLayout
        android:id="@+id/layout_item"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:orientation="horizontal"
        android:background="@drawable/bg_self_test"
        >
        <TextView
            android:id="@+id/text_question"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:textColor="@color/color_666666"
            android:textSize="16sp"
            android:layout_marginLeft="15dp"
            android:lines="1"
            android:ellipsize="end"/>

        <TextView
            android:id="@+id/text_answer"
            android:layout_width="33dp"
            android:layout_height="33dp"
            android:background="@drawable/btn_bg_self_test_not_click"
            android:gravity="center"
            android:textSize="12sp"
            android:textColor="@color/color_999999"
            android:layout_marginRight="20dp"
            />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/bottom_view"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@drawable/bg_self_test"
        android:orientation="vertical"
        android:visibility="gone">

        <TextView
            android:id="@+id/text_question_open"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:layout_marginRight="14dp"
            android:layout_marginTop="24dp"
            android:lineSpacingExtra="5dp"
            android:text="1、你的脸比别人大吗"
            android:textColor="@color/color_3183e9" />

        <LinearLayout
            android:id="@+id/btn_linear"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="70dp"
            android:gravity="center"
            android:orientation="horizontal">

            <View
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_weight="1" />

            <TextView
                android:id="@+id/btn_none"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/btn_bg_self_test_can_click"
                android:clickable="true"
                android:gravity="center"
                android:text="没有"
                android:textColor="@color/color_3183e9"
                android:textSize="14sp" />

            <View
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_weight="1" />

            <TextView
                android:id="@+id/btn_little"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/btn_bg_self_test_can_click"
                android:clickable="true"
                android:gravity="center"
                android:text="很少"
                android:textColor="@color/color_3183e9"
                android:textSize="14sp" />

            <View
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_weight="1" />

            <TextView
                android:id="@+id/btn_some"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/btn_bg_self_test_can_click"
                android:clickable="true"
                android:gravity="center"
                android:text="有时"
                android:textColor="@color/color_3183e9"
                android:textSize="14sp" />

            <View
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_weight="1" />

            <TextView
                android:id="@+id/btn_often"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/btn_bg_self_test_can_click"
                android:clickable="true"
                android:gravity="center"
                android:text="经常"
                android:textColor="@color/color_3183e9"
                android:textSize="14sp" />

            <View
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_weight="1" />

            <TextView
                android:id="@+id/btn_always"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:background="@drawable/btn_bg_self_test_can_click"
                android:clickable="true"
                android:gravity="center"
                android:text="总是"
                android:textColor="@color/color_3183e9"
                android:textSize="14sp" />

            <View
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_weight="1" />
        </LinearLayout>

    </RelativeLayout>

</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值