1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android开源的精美日历控件 热插拔设计的万能自定义UI 你值得拥有

Android开源的精美日历控件 热插拔设计的万能自定义UI 你值得拥有

时间:2023-01-12 14:12:08

相关推荐

Android开源的精美日历控件 热插拔设计的万能自定义UI 你值得拥有

XML用法

如果需要在日历控件下方使用其它控件,使用CalendarLayout控件即可,calendar_content_view_id为其它控件的id,支持任意控件,如RecyclerView、ListView。CalendarView的calendar_card_view为任意自定义实现的日历绘制控件路径。

<com.haibin.calendarview.CalendarLayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”

android:background="#fff"

app:calendar_content_view_id="@+id/linearView">

<com.haibin.calendarview.CalendarView

android:id="@+id/calendarView"

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:background="#fff"

app:current_month_text_color="#333333"

app:current_month_lunar_text_color="#CFCFCF"

app:min_year=“”

app:other_month_text_color="#e1e1e1"

app:scheme_text_color="#333"

app:scheme_theme_color="#128c4b"

app:selected_lunar_text_color="#CFCFCF"

app:calendar_card_view=“com.haibin.calendarviewproject.meizu.MeiZuCalendarCardView”

app:selected_text_color="#333"

app:selected_theme_color="#108cd4"

app:week_background="#fff"

app:week_text_color="#111" />

</com.haibin.calendarview.CalendarLayout>

熟悉一下这几个简单的特性,看看日历内容界面的绘制BaseCalendarCardView,根据需求实现以下部分方法即可

/**

开始绘制前的回调钩子,这里做一些初始化的操作,每次绘制只调用一次,性能高效没有需要可忽略不实现例如:1、需要绘制圆形标记事件背景,可以在这里计算半径2、绘制矩形选中效果,也可以在这里计算矩形宽和高

*/

protected void onPreviewHook() {

// TODO: /11/16

}

/**

循环绘制开始的回调,不需要可忽略绘制每个日历项的循环,用来计算baseLine、圆心坐标等都可以在这里实现@param x 日历Card x起点坐标@param y 日历Card y起点坐标

*/

protected void onLoopStart(int x, int y) {

// TODO: /11/16

}

/**

绘制选中的日期@param canvas canvas@param calendar 日历日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标@param hasScheme hasScheme 非标记的日期

*/

protected abstract void onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme);

/**

绘制标记的日期UI@param canvas canvas@param calendar 日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标

*/

protected abstract void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y);

/**

绘制日历文本@param canvas canvas@param calendar 日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标@param hasScheme 是否是标记的日期@param isSelected 是否选中

*/

protected abstract void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected);

举个例子:如果你的需求是类似魅族日历的UI,那么第一步,继承BaseCalendarCardView,然后实现onDrawSelected、onDrawScheme、onDrawText三个回调函数即可

public class MeiZuCalendarCardView extends BaseCalendarCardView {

private Paint mTextPaint = new Paint();

private Paint mSchemeBasicPaint = new Paint();

private float mRadio;

private int mPadding;

private float mSchemeBaseLine;

public MeiZuCalendarCardView(Context context) {

super(context);

mTextPaint.setTextSize(dipToPx(context, 8));

mTextPaint.setColor(0xff111111);

mTextPaint.setAntiAlias(true);

mTextPaint.setFakeBoldText(true);

mSchemeBasicPaint.setAntiAlias(true);

mSchemeBasicPaint.setStyle(Paint.Style.FILL);

mSchemeBasicPaint.setTextAlign(Paint.Align.CENTER);

mSchemeBasicPaint.setColor(0xffed5353);

mSchemeBasicPaint.setFakeBoldText(true);

mRadio = dipToPx(getContext(), 7);

mPadding = dipToPx(getContext(), 4);

Paint.FontMetrics metrics = mSchemeBasicPaint.getFontMetrics();

mSchemeBaseLine = mRadio - metrics.descent + (metrics.bottom - metrics.top) / 2 + dipToPx(getContext(), 1);

}

/**

绘制选中的日期@param canvas canvas@param calendar 日历日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标@param hasScheme hasScheme 非标记的日期

*/

@Override

protected void onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {

mSelectedPaint.setStyle(Paint.Style.FILL);

mSelectedPaint.setColor(0x80cfcfcf);

canvas.drawRect(x + mPadding, y + mPadding, x + mItemWidth - mPadding, y + mItemHeight - mPadding, mSelectedPaint);

}

/**

绘制标记的日期UI 这里魅族界面不需要绘制多彩风格,忽略即可@param canvas canvas@param calendar 日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标

写在最后

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从哪里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

我的【Github】会分享一些关于Android进阶方面的知识,也会分享一下最新的面试题~

如果你熟练掌握GitHub中列出的知识点,相信将会大大增加你通过前两轮技术面试的几率!这些内容都供大家参考,互相学习。

①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包——————可以在我的【Github】阅读下载,最后觉得有帮助、有需要的朋友可以点个赞

%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)阅读下载**,最后觉得有帮助、有需要的朋友可以点个赞

[外链图片转存中…(img-iOzHObug-1646139363726)]

[外链图片转存中…(img-RldUOTGv-1646139363728)]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。