Android"自定义"日历

这篇博客介绍了如何在Android中创建一个可自定义的日历控件,包括其基本功能、自定义属性和绘制逻辑。作者通过提供源码和思路,帮助开发者了解如何根据需求调整日历布局,并鼓励读者尝试添加更多自定义功能,如自定义按钮图片。
摘要由CSDN通过智能技术生成

前言:

之前,做好几个项目,老大要求的日历控件样子都差不多,但本人怕麻烦地老往代码里去改,所以就想着做一个可以在布局修改就能满足需求的日历控件,所以就有了这个了


效果:



自定义属性:

<declare-styleable name="Calendar">
        <attr name="hpadding" format="float"></attr>
        <attr name="wpadding" format="float"></attr>
        <attr name="downcolor" format="color"></attr>
        <attr name="bordercolor" format="color"></attr>
        <attr name="weekcolor" format="color"></attr>

        <attr name="monthbg1color" format="color"></attr>
        <attr name="monthbg1fill" format="boolean"></attr>

        <attr name="monthbg2color" format="color"></attr>
        <attr name="monthbg2fill" format="boolean"></attr>

        <attr name="todaycolor" format="color"></attr>
        <attr name="normalcolor" format="color"></attr>
        <attr name="othermonthcolor" format="color"></attr>
        <attr name="weekscale" format="float"></attr>
        <attr name="datescale" format="float"></attr>
        <attr name="ischinese" format="boolean"></attr>
        <attr name="isbold" format="boolean"></attr>
        <attr name="buttondistance" format="float"></attr>

    </declare-styleable>


因为自定义的属性,比较多配合下面几个图来说一下


属性描述:

属性名称 属性描述 备注
hpadding 日历与上下的间距 默认为0
wpadding 日历与左右的间距 默认为0
buttondistance 按钮与左右的间距 默认为0
monthbg1color 背景1的颜色 默认为0x00000000
monthbg1fill 背景1是否全部填充 默认为false
monthbg2color 背景2的颜色 默认为0x00000000
monthbg2color 背景2是否全部填充 默认为false
bordercolor 边框的颜色 默认为0x00000000
todaycolor 今天日期的颜色 默认为0xFFFF0000
normalcolor 当前月的日期的颜色(注意,是指日历而不是现实中的) 默认为0xFF000000
othermonthcolor 其他月份的日期的颜色 默认为0xFFCCCCCC
isbold 星期文本与日期文本是否加粗 默认为false
weekscale 星期文本的缩放大小 默认为1.0f
datescale 日期文本的缩放大小 默认为1.0f
downcolor 按下时,圆的颜色 默认为0x00000000
ischinese 星期与年月的显示是否为中文 默认为false
weekcolor 星期文本的颜色 默认为0xFF000000


思路:

1.排除掉这些自定义属性,我们要实现一个日历的基本功能(改变月份时,日历上的日期也会改变),那我们需要两样重要的东西来实现:存放日期的数字的数组或list记录位置的索引

2.当基本功能完成后,我们就要确认下绘制顺序,这个比较简单

3.加入上面的属性,并加入一些限制,放置使用者把这个控件玩脱了


先上全部源码吧:

package calendar;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

import com.example.peng.myapplication.R;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;


/**
 * Created by peng on 2017/5/5.
 */

public class CalendarView extends View implements View.OnTouchListener{
    float width,height;//控件的宽与高
    flo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要自定义 Android 日历,可以使用 Android 提供的 CalendarView 组件或自定义 View 实现。以下是使用 CalendarView 组件实现自定义日历的步骤: 1. 在 XML 文件中添加 CalendarView 组件。 ``` <CalendarView android:id="@+id/calendar_view" android:layout_width="match_parent" android:layout_height="match_parent" android:theme="@style/CalendarTheme" android:dateTextAppearance="@style/CalendarDateText" android:weekDayTextAppearance="@style/CalendarWeekDayText" android:selectedWeekBackgroundColor="@color/selected_week_background" android:focusedMonthDateColor="@color/focused_month_date" android:unfocusedMonthDateColor="@color/unfocused_month_date" android:weekNumberColor="@color/week_number" android:shownWeekCount="6" android:firstDayOfWeek="2" android:showWeekNumber="true" /> ``` 2. 创建样式和颜色资源文件,以在日历视图中应用自定义样式和颜色。 3. 通过设置 OnDateChangeListener 监听器来处理用户选择的日期。 ``` CalendarView calendarView = findViewById(R.id.calendar_view); calendarView.setOnDateChangeListener(new OnDateChangeListener() { @Override public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) { // 处理用户选择的日期 } }); ``` 4. 可以使用 Java 代码修改 CalendarView 组件的属性,例如设置日期范围、选中日期等等。 ``` calendarView.setMinDate(minDate.getTime()); calendarView.setMaxDate(maxDate.getTime()); calendarView.setDate(currentDate.getTime()); ``` 以上是使用 CalendarView 组件实现自定义日历的基本步骤。如果需要更多的自定义功能,可以考虑使用自定义 View 实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值