关于项目的一点点总结,签到返利日历的实现

来源:互联网 发布:软件研发部门规划 编辑:程序博客网 时间:2024/05/16 23:43

突然发现之前已经有两篇博客了,最近开发了两个新项目,10.1之前上线,所以一直都很忙,新项目用到了几个知识点,所以在此总结一下,
首先做了一个签到返利效果的,在网上找了蛮多的demo,但是没有合适的,主要看了两种
我接触的两种方式
1.通过GridView 去写一个日历
2.通过自定义去画一个日历
最后我选了自定义View 不管哪一种,都需要用到DateUtils,获取年月日

(这里因为是测试库的数据,所以签到金额UI显示有问题,但是线上库的数据不是100,是0.1,0.2这样的数字,所以文字上偏移不会太大)
这里写图片描述

public class DateUtils {    /**     * 通过年份和月份 得到当月的日子     *      * @param year     * @param month     * @return     */    public static int getMonthDays(int year, int month) {        month++;        switch (month) {        case 1:        case 3:        case 5:        case 7:        case 8:        case 10:        case 12:             return 31;        case 4:        case 6:        case 9:        case 11:             return 30;        case 2:            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){                return 29;            }else{                return 28;            }        default:            return  -1;        }    }    /**     * 返回当前月份1号位于周几     * @param year     *      年份     * @param month     *      月份,传入系统获取的,不需要正常的     * @return     *  日:1     一:2     二:3     三:4     四:5     五:6     六:7     */    public static int getFirstDayWeek(int year, int month){        Calendar calendar = Calendar.getInstance();        calendar.set(year, month, 1);        Log.d("DateView", "DateView:First:" + calendar.getFirstDayOfWeek());        return calendar.get(Calendar.DAY_OF_WEEK);    }}

然后就是在代码中画出来自己想要的布局
这里是先通过一个循环遍历取出一个月中的天,给每一天设置在Canvas中显示的位置,(关于自定义View,推荐扔物线大神写的一系列文章 http://hencoder.com/ui-1-5/)

这里写代码片  只给出核心代码public class MonthDateView extends View {     @Override    protected void onDraw(Canvas canvas) {        initSize();        daysString = new int[6][7];        mPaint.setTextSize(mDaySize * mDisplayMetrics.scaledDensity);        String dayString;        //日 数量 30        int mMonthDays = DateUtils.getMonthDays(mSelYear, mSelMonth);        //获取当前第一天 是第几周        int weekNumber = DateUtils.getFirstDayWeek(mSelYear, mSelMonth);        Log.d("DateView", "DateView:" + mSelMonth + "月1号周" + weekNumber);        //这是画每一天        for (int day = 0; day < mMonthDays; day++) {            //dayString 就是当前date的Int 值            dayString = (day + 1) + "";            int column = (day + weekNumber - 1) % 7;            int row = (day + weekNumber - 1) / 7;            //画每一天            daysString[row][column] = day + 1;            int startX = (int) (mColumnSize * column + (mColumnSize - mPaint.measureText(dayString)) / 2);            int startY = (int) (mRowSize * row + mRowSize / 2 - (mPaint.ascent() + mPaint.descent()) / 2);            if (dayString.equals(mSelDay + "")) {                //画 选中每一天的背景样式                float startCirX = (float) (mColumnSize * column + mColumnSize / 2);                float startCirY = (float) (mRowSize * row + mRowSize / 2);                mPaint.setColor(mCircleColor);                mPaint.setAntiAlias(true);                canvas.drawCircle(startCirX, startCirY, 40, mPaint);                //记录第几行,即第几周                weekRow = row + 1;            }            //画有返利金额天数的背景样式 以及下面的 样式  画了很多次造成这样子的UI效果//            drawCircle(startX, startY, row,day, canvas, dayMoney);            drawCircle(row, column, day, canvas, dayMoney);            if (dayString.equals(mSelDay + "")) {                mPaint.setColor(mSelectDayColor);            } else if (dayString.equals(mCurrDay + "") && mCurrDay != mSelDay && mCurrMonth == mSelMonth) {                //正常月,选中其他日期,则今日为红色                mPaint.setColor(mCurrentColor);            } else {                mPaint.setColor(mDayColor);            }            canvas.drawText(dayString, startX, startY, mPaint);            if (tv_date != null) {                tv_date.setText(mSelYear + "年" + (mSelMonth + 1) + "月");            }            if (tv_week != null) {                tv_week.setText("第" + weekRow + "周");            }        }    }}

因为我们还需要设置一些签到之后显示的效果,所以把显示的效果在
drawCircle(int row, int column, int day, Canvas canvas, Map

 public void drawCircle(int row, int column, int day, Canvas canvas, Map<Integer, String> textMoney) {        if (daysHasThingList != null && daysHasThingList.size() > 0) {            //包含此天!!!!!!!!            if (!daysHasThingList.contains(day)) return;            if (getmSelMonth() == mCurrMonth) {                Resources resources = getResources();                float startCirX = (float) (mColumnSize * column + mColumnSize / 2);                float startCirY = (float) (mRowSize * row + mRowSize / 2);                //天数 背景 圆环  mColumnSize = 97 固定值                int newColumn = mColumnSize * column;                int newRow = mRowSize * row;                Bitmap bitmap2 = BitmapFactory.decodeResource(resources, myDrawableSHape);                int mBitWidth = bitmap2.getWidth();                int mBitHeight = bitmap2.getHeight();////                float shapeX = (float) (newColumn+ mColumnSize*0.17 );//                float shapey = (float) (newRow +mRowSize*0.18 );                float shapeX = (float) (newColumn+mBitWidth*0.28 );                float shapey = (float) (newRow +mBitHeight/4 );                mPaint.setAntiAlias(true);                canvas.drawBitmap(bitmap2, shapeX, shapey, mPaint);                /**                 *TODO 重新画 很重要                 *///                int mBitWidth = bitmap2.getWidth();//                int mBitHeight = bitmap2.getHeight();//                int roundleft = newColumn;//                int roundtop = newRow ;//                mSrcRect = new Rect(roundleft, roundtop, mBitWidth, mBitHeight);//                mDestRect = new Rect(roundleft, roundtop, mBitWidth, mBitHeight);//                canvas.drawBitmap(bitmap2, mSrcRect, mDestRect, mPaint);                //金额背景                float circleX = (float) (mColumnSize * column + mColumnSize * 0.05);                float circley = (float) (mRowSize * row + mRowSize * 0.7);                mPaint.setAntiAlias(true);                Bitmap bitmap = BitmapFactory.decodeResource(resources, myDrawable);                canvas.drawBitmap(bitmap, circleX, circley, mPaint);                //金额                String money = textMoney.get(day);//                float textY = (float) circley + mRowSize / 3;                Paint paint1 = new Paint();                paint1.setColor(mMoneyColor);                paint1.setAntiAlias(true);                paint1.setTextSize((mDaySize * mDisplayMetrics.scaledDensity / 3) * 2);//                float textX =   (float) (mColumnSize * column + (mColumnSize - paint1.measureText(String.valueOf(day))) / 2);;                float textX = (float) newColumn +mColumnSize/4;                float textY = (float) ((float) circley +(float) mColumnSize *0.3);                String newmoney ="+" + money + "元";                canvas.drawText(newmoney, textX, textY, paint1);            }        }    }

主要功能代码大概就是这样,现在贴出来全部代码

public class MonthDateView extends View {    private static final int NUM_COLUMNS = 7;    private static final int NUM_ROWS = 6;    private Paint mPaint;    private int mDayColor = Color.parseColor("#000000");    private int mSelectDayColor = Color.parseColor("#ffffff");    private int mSelectBGColor = Color.parseColor("#1FC2F3");    private int mCurrentColor = Color.parseColor("#ff0000");    private int mCurrYear, mCurrMonth, mCurrDay;    private int mSelYear, mSelMonth, mSelDay;    private int mColumnSize, mRowSize;    private DisplayMetrics mDisplayMetrics;    private int mDaySize = 16;    private TextView tv_date, tv_week;    private int weekRow;    private int[][] daysString;    private int mCircleRadius = 6;    private DateClick dateClick;    private int mCircleColor = Color.parseColor("#ff0000");    private int mTextColor = Color.parseColor("#1d1d1d");//    private int mMoneyColor = Color.parseColor("#1d1d1d");    private int mMoneyColor = Color.parseColor("#ffffff");    private List<Integer> daysHasThingList;    private Map<Integer, String> dayMoney;    private int myDrawable = R.drawable.signin_calendar_moneybg;    private int myDrawableSHape = R.drawable.signin_calendar_round;    private int dateTag = 0;    public MonthDateView(Context context, AttributeSet attrs) {        super(context, attrs);        //density = 2.0        mDisplayMetrics = getResources().getDisplayMetrics();        Calendar calendar = Calendar.getInstance();        mPaint = new Paint();        mCurrYear = calendar.get(Calendar.YEAR);        mCurrMonth = calendar.get(Calendar.MONTH);        mCurrDay = calendar.get(Calendar.DATE);        setSelectYearMonth(mCurrYear, mCurrMonth, mCurrDay);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }    @Override    protected void onDraw(Canvas canvas) {        initSize();        daysString = new int[6][7];        mPaint.setTextSize(mDaySize * mDisplayMetrics.scaledDensity);        String dayString;        //日 数量 30        int mMonthDays = DateUtils.getMonthDays(mSelYear, mSelMonth);        //获取当前第一天 是第几周        int weekNumber = DateUtils.getFirstDayWeek(mSelYear, mSelMonth);        Log.d("DateView", "DateView:" + mSelMonth + "月1号周" + weekNumber);        //这是画每一天        for (int day = 0; day < mMonthDays; day++) {            //dayString 就是当前date的Int 值            dayString = (day + 1) + "";            int column = (day + weekNumber - 1) % 7;            int row = (day + weekNumber - 1) / 7;            //画每一天            daysString[row][column] = day + 1;            int startX = (int) (mColumnSize * column + (mColumnSize - mPaint.measureText(dayString)) / 2);            int startY = (int) (mRowSize * row + mRowSize / 2 - (mPaint.ascent() + mPaint.descent()) / 2);            if (dayString.equals(mSelDay + "")) {                //画 选中每一天的背景样式                float startCirX = (float) (mColumnSize * column + mColumnSize / 2);                float startCirY = (float) (mRowSize * row + mRowSize / 2);                mPaint.setColor(mCircleColor);                mPaint.setAntiAlias(true);                canvas.drawCircle(startCirX, startCirY, 40, mPaint);                //记录第几行,即第几周                weekRow = row + 1;            }            //画有返利金额天数的背景样式 以及下面的 样式  画了很多次造成这样子的UI效果//            drawCircle(startX, startY, row,day, canvas, dayMoney);            drawCircle(row, column, day, canvas, dayMoney);            if (dayString.equals(mSelDay + "")) {                mPaint.setColor(mSelectDayColor);            } else if (dayString.equals(mCurrDay + "") && mCurrDay != mSelDay && mCurrMonth == mSelMonth) {                //正常月,选中其他日期,则今日为红色                mPaint.setColor(mCurrentColor);            } else {                mPaint.setColor(mDayColor);            }            canvas.drawText(dayString, startX, startY, mPaint);            if (tv_date != null) {                tv_date.setText(mSelYear + "年" + (mSelMonth + 1) + "月");            }            if (tv_week != null) {                tv_week.setText("第" + weekRow + "周");            }        }    }    private Rect mSrcRect, mDestRect;    public void drawCircle(int row, int column, int day, Canvas canvas, Map<Integer, String> textMoney) {        if (daysHasThingList != null && daysHasThingList.size() > 0) {            //包含此天!!!!!!!!            if (!daysHasThingList.contains(day)) return;            if (getmSelMonth() == mCurrMonth) {                Resources resources = getResources();                float startCirX = (float) (mColumnSize * column + mColumnSize / 2);                float startCirY = (float) (mRowSize * row + mRowSize / 2);                //天数 背景 圆环  mColumnSize = 97 固定值                int newColumn = mColumnSize * column;                int newRow = mRowSize * row;                Bitmap bitmap2 = BitmapFactory.decodeResource(resources, myDrawableSHape);                int mBitWidth = bitmap2.getWidth();                int mBitHeight = bitmap2.getHeight();////                float shapeX = (float) (newColumn+ mColumnSize*0.17 );//                float shapey = (float) (newRow +mRowSize*0.18 );                float shapeX = (float) (newColumn+mBitWidth*0.28 );                float shapey = (float) (newRow +mBitHeight/4 );                mPaint.setAntiAlias(true);                canvas.drawBitmap(bitmap2, shapeX, shapey, mPaint);                /**                 *TODO 重新画 很重要                 *///                int mBitWidth = bitmap2.getWidth();//                int mBitHeight = bitmap2.getHeight();//                int roundleft = newColumn;//                int roundtop = newRow ;//                mSrcRect = new Rect(roundleft, roundtop, mBitWidth, mBitHeight);//                mDestRect = new Rect(roundleft, roundtop, mBitWidth, mBitHeight);//                canvas.drawBitmap(bitmap2, mSrcRect, mDestRect, mPaint);                //金额背景                float circleX = (float) (mColumnSize * column + mColumnSize * 0.05);                float circley = (float) (mRowSize * row + mRowSize * 0.7);                mPaint.setAntiAlias(true);                Bitmap bitmap = BitmapFactory.decodeResource(resources, myDrawable);                canvas.drawBitmap(bitmap, circleX, circley, mPaint);                //金额                String money = textMoney.get(day);//                float textY = (float) circley + mRowSize / 3;                Paint paint1 = new Paint();                paint1.setColor(mMoneyColor);                paint1.setAntiAlias(true);                paint1.setTextSize((mDaySize * mDisplayMetrics.scaledDensity / 3) * 2);//                float textX =   (float) (mColumnSize * column + (mColumnSize - paint1.measureText(String.valueOf(day))) / 2);;                float textX = (float) newColumn +mColumnSize/4;                float textY = (float) ((float) circley +(float) mColumnSize *0.3);                String newmoney ="+" + money + "元";                canvas.drawText(newmoney, textX, textY, paint1);            }        }    }    @Override    public boolean performClick() {        return super.performClick();    }    private int downX = 0, downY = 0;    @Override    public boolean onTouchEvent(MotionEvent event) {        int eventCode = event.getAction();        switch (eventCode) {            case MotionEvent.ACTION_DOWN:                downX = (int) event.getX();                downY = (int) event.getY();                break;            case MotionEvent.ACTION_MOVE:                break;            case MotionEvent.ACTION_UP:                int upX = (int) event.getX();                int upY = (int) event.getY();                if (Math.abs(upX - downX) < 10 && Math.abs(upY - downY) < 10) {//点击事件                    performClick();                    doClickAction((upX + downX) / 2, (upY + downY) / 2);                }                break;        }        return true;    }    /**     * 初始化列宽行高     */    private void initSize() {        mColumnSize = getWidth() / NUM_COLUMNS;        mRowSize = getHeight() / NUM_ROWS;    }    /**     * 设置年月     *     * @param year     * @param month     */    private void setSelectYearMonth(int year, int month, int day) {        mSelYear = year;        mSelMonth = month;        mSelDay = day;    }    /**     * 执行点击事件     *     * @param x     * @param y     */    private void doClickAction(int x, int y) {        int row = y / mRowSize;        int column = x / mColumnSize;        setSelectYearMonth(mSelYear, mSelMonth, daysString[row][column]);        invalidate();        //执行activity发送过来的点击处理事件        if (dateClick != null) {            dateClick.onClickOnDate();        }    }    /**     * 左点击,日历向后翻页     */    public void onLeftClick() {        int year = mSelYear;        int month = mSelMonth;        int day = mSelDay;        if (month == 0) {//若果是1月份,则变成12月份            year = mSelYear - 1;            month = 11;        } else if (DateUtils.getMonthDays(year, month) == day) {            //如果当前日期为该月最后一点,当向前推的时候,就需要改变选中的日期            month = month - 1;            day = DateUtils.getMonthDays(year, month);        } else {            month = month - 1;        }        setSelectYearMonth(year, month, day);        invalidate();    }    /**     * 右点击,日历向前翻页     */    public void onRightClick() {        int year = mSelYear;        int month = mSelMonth;        int day = mSelDay;        if (month == 11) {//若果是12月份,则变成1月份            year = mSelYear + 1;            month = 0;        } else if (DateUtils.getMonthDays(year, month) == day) {            //如果当前日期为该月最后一点,当向前推的时候,就需要改变选中的日期            month = month + 1;            day = DateUtils.getMonthDays(year, month);        } else {            month = month + 1;        }        setSelectYearMonth(year, month, day);        invalidate();    }    /**     * 获取选择的年份     *     * @return     */    public int getmSelYear() {        return mSelYear;    }    /**     * 获取选择的月份     *     * @return     */    public int getmSelMonth() {        return mSelMonth;    }    /**     * 获取选择的日期     *     * @param     */    public int getmSelDay() {        return this.mSelDay;    }    /**     * 普通日期的字体颜色,默认黑色     *     * @param mDayColor     */    public void setmDayColor(int mDayColor) {        this.mDayColor = mDayColor;    }    /**     * 选择日期的颜色,默认为白色     *     * @param mSelectDayColor     */    public void setmSelectDayColor(int mSelectDayColor) {        this.mSelectDayColor = mSelectDayColor;    }    /**     * 选中日期的背景颜色,默认蓝色     *     * @param mSelectBGColor     */    public void setmSelectBGColor(int mSelectBGColor) {        this.mSelectBGColor = mSelectBGColor;    }    /**     * 当前日期不是选中的颜色,默认红色     *     * @param mCurrentColor     */    public void setmCurrentColor(int mCurrentColor) {        this.mCurrentColor = mCurrentColor;    }    /**     * 日期的大小,默认18sp     *     * @param mDaySize     */    public void setmDaySize(int mDaySize) {        this.mDaySize = mDaySize;    }    /**     * 设置显示当前日期的控件     *     * @param tv_date 显示日期     * @param tv_week 显示周     */    public void setTextView(TextView tv_date, TextView tv_week) {        this.tv_date = tv_date;        this.tv_week = tv_week;        invalidate();    }    /**     * 设置事务天数     *     * @param daysHasThingList     */    public void setDaysHasThingList(List<Integer> daysHasThingList) {        this.daysHasThingList = daysHasThingList;    }    /***     * 设置圆圈的半径,默认为6     *     * @param mCircleRadius     */    public void setmCircleRadius(int mCircleRadius) {        this.mCircleRadius = mCircleRadius;    }    /**     * 设置圆圈的半径     *     * @param mCircleColor     */    public void setmCircleColor(int mCircleColor) {        this.mCircleColor = mCircleColor;    }    /**     * 设置日期的点击回调事件     *     * @author shiwei.deng     */    public interface DateClick {        public void onClickOnDate();    }    /**     * 设置日期点击事件     *     * @param dateClick     */    public void setDateClick(DateClick dateClick) {        this.dateClick = dateClick;    }    /**     * 跳转至今天     */    public void setTodayToView() {        setSelectYearMonth(mCurrYear, mCurrMonth, mCurrDay);        invalidate();    }    /*    需要日期 需要 金额     */    public void setMoney(Map<Integer, String> money) {        this.dayMoney = money;    }}
public class WeekDayView extends View {    //上横线颜色    private int mTopLineColor = Color.parseColor("#CCE4F2");    //下横线颜色    private int mBottomLineColor = Color.parseColor("#CCE4F2");    //周一到周五的颜色    private int mWeedayColor = Color.parseColor("#1d1d1d");    //周六、周日的颜色    private int mWeekendColor = Color.parseColor("#ff0000");    //线的宽度    private int mStrokeWidth = 4;    private int mWeekSize = 14;    private Paint paint;    private DisplayMetrics mDisplayMetrics;    private String[] weekString = new String[]{"日","一","二","三","四","五","六"};    public WeekDayView(Context context, AttributeSet attrs) {        super(context, attrs);        mDisplayMetrics = getResources().getDisplayMetrics();        paint = new Paint();    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int widthSize = MeasureSpec.getSize(widthMeasureSpec);        int widthMode = MeasureSpec.getMode(widthMeasureSpec);        int heightSize = MeasureSpec.getSize(heightMeasureSpec);        int heightMode = MeasureSpec.getMode(heightMeasureSpec);        if(heightMode == MeasureSpec.AT_MOST){            heightSize = mDisplayMetrics.densityDpi * 30;        }        if(widthMode == MeasureSpec.AT_MOST){            widthSize = mDisplayMetrics.densityDpi * 300;        }        setMeasuredDimension(widthSize, heightSize);    }    @Override    protected void onDraw(Canvas canvas) {        int width = getWidth();        int height = getHeight();        //进行画上下线        paint.setStyle(Style.STROKE);        paint.setColor(mTopLineColor);        paint.setStrokeWidth(mStrokeWidth);        canvas.drawLine(0, 0, width, 0, paint);        //画下横线        paint.setColor(mBottomLineColor);        canvas.drawLine(0, height, width, height, paint);        paint.setStyle(Style.FILL);        paint.setTextSize(mWeekSize * mDisplayMetrics.scaledDensity);        int columnWidth = width / 7;        for(int i=0;i < weekString.length;i++){            String text = weekString[i];            int fontWidth = (int) paint.measureText(text);            int startX = columnWidth * i + (columnWidth - fontWidth)/2;            int startY = (int) (height/2 - (paint.ascent() + paint.descent())/2);            if(text.indexOf("日") > -1|| text.indexOf("六") > -1){                paint.setColor(mWeekendColor);            }else{                paint.setColor(mWeedayColor);            }            canvas.drawText(text, startX, startY, paint);        }    }    /**     * 设置顶线的颜色     * @param mTopLineColor     */    public void setmTopLineColor(int mTopLineColor) {        this.mTopLineColor = mTopLineColor;    }    /**     * 设置底线的颜色     * @param mBottomLineColor     */    public void setmBottomLineColor(int mBottomLineColor) {        this.mBottomLineColor = mBottomLineColor;    }    /**     * 设置周一-五的颜色     * @return     */    public void setmWeedayColor(int mWeedayColor) {        this.mWeedayColor = mWeedayColor;    }    /**     * 设置周六、周日的颜色     * @param mWeekendColor     */    public void setmWeekendColor(int mWeekendColor) {        this.mWeekendColor = mWeekendColor;    }    /**     * 设置边线的宽度     * @param mStrokeWidth     */    public void setmStrokeWidth(int mStrokeWidth) {        this.mStrokeWidth = mStrokeWidth;    }    /**     * 设置字体的大小     * @param mWeekSize     */    public void setmWeekSize(int mWeekSize) {        this.mWeekSize = mWeekSize;    }    /**     * 设置星期的形式     * @param weekString     * 默认值  "日","一","二","三","四","五","六"     */    public void setWeekString(String[] weekString) {        this.weekString = weekString;    }}

至于在代码中调用 因为需要和服务器对接数据,服务器回传过来日期金额以及是否签到状态

 List<Integer> listDate = new ArrayList<Integer>();    Map<Integer, String> listMoney = new HashMap<>();  /**     * 获取网络数据  签到日期 返利金额     *     * @param response     */    private void processTaskData(String response) {        Type collectionType = new TypeToken<List<DataPOJO>>() {        }.getType();        data = (List<DataPOJO>) new Gson()                .fromJson(response, collectionType);        list = new ArrayList<>();        listDate.clear();        listMoney.clear();        //获取服务器数据        for (int i = 0; i < data.size(); i++) {            String date = data.get(i).date;            String money = data.get(i).money;            String status = data.get(i).status;            if (status.equals("0")) {                listDate.add(i);                listMoney.put(i, money);            }        }        //设置签到显示        monthDateView.setDaysHasThingList(listDate);        monthDateView.setMoney(listMoney);        ProgressBarUtil.dismissProgress(getActivity());    };

这样大概就是整个签到返利效果的日历了

下面是布局的部分代码 ,因为借鉴网上的,所以修改了一下

  <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main12"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@color/standard_white"    android:fitsSystemWindows="true"    android:orientation="vertical">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="160dp"        android:background="@drawable/signin_bg">        <RelativeLayout            android:id="@+id/task_main_click"            android:layout_width="100dp"            android:layout_height="100dp"            android:layout_centerHorizontal="true"            android:layout_marginTop="@dimen/commen_30dp"            android:background="@drawable/signin_menu_nor">            <TextView                android:id="@+id/task_main_profit"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerHorizontal="true"                android:layout_marginTop="@dimen/commen_50dp"                android:text="点击签到"                android:textColor="@color/standard_red"                android:textSize="16sp" />            <TextView                android:id="@+id/task_main_time"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerHorizontal="true"                android:layout_marginTop="@dimen/commen_70dp"                android:text="未登录"                android:textColor="#ffa478"                android:textSize="11sp" />        </RelativeLayout>        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_alignParentBottom="true"            android:layout_marginBottom="@dimen/commen_10dp"            android:gravity="center_horizontal"            android:text="连续打卡天数越多,打卡奖金越高噢!"            android:textColor="#99ffffff" />    </RelativeLayout>    <!-- 日历时间选择栏 -->    <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="25dp"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="@dimen/commen_30dp"        android:background="#ffffff"        android:gravity="center_vertical">        <ImageView            android:id="@+id/iv_left"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"            android:layout_centerVertical="true"            android:layout_marginLeft="75dp"            android:background="@drawable/signin_arrow_left"            android:contentDescription="@null" />        <ImageView            android:id="@+id/iv_right"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_centerVertical="true"            android:layout_marginRight="75dp"            android:background="@drawable/signin_arrow_right"            android:contentDescription="@null" />        <LinearLayout            android:id="@+id/date_operator_ll"            android:layout_width="fill_parent"            android:layout_height="match_parent"            android:layout_centerInParent="true"            android:gravity="center"            android:orientation="horizontal">            <TextView                android:id="@+id/tv_today"                android:layout_width="25dp"                android:layout_height="25dp"                android:layout_marginRight="5dp"                android:background="#FFD700"                android:gravity="center"                android:text="今"                android:textColor="#ffffff"                android:textSize="17sp"                android:visibility="gone" />            <TextView                android:id="@+id/date_text"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:gravity="center_vertical"                android:text=""                android:textColor="@color/text_black"                android:textSize="20sp" />            <TextView                android:id="@+id/week_text"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="10dp"                android:gravity="center_horizontal"                android:text=""                android:textColor="#93C73C"                android:textSize="20sp"                android:visibility="gone" />        </LinearLayout>    </RelativeLayout>    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="@dimen/commen_30dp"        android:background="#ffffff"        android:orientation="vertical">        <io.dcloud.H53CF40A7.view.WeekDayView            android:layout_width="match_parent"            android:layout_height="30dp" />        <io.dcloud.H53CF40A7.view.MonthDateView            android:id="@+id/monthDateView"            android:layout_width="fill_parent"            android:layout_height="match_parent" />    </LinearLayout></LinearLayout>