Android定制日历,支持周月切换,日期标记,农历显示,节假日

Android入门实例四 设置日期和时间的设计与实现 这次主要是通过使用DataPicker(日期)和TimePicker(时间)两个组件来实现,如果需要捕获用户修改的日期或时间,需要分别为它们添加监听器。 阅读详情

公司项目需要一个功能全面的日历,然后就在网上找demo,然后根据demo自己深度定制了一个日历,基本满足了需求,现在把日历核心代码共享给大家。源码下载地址http://download.youkuaiyun.com/detail/voidmain_123/9275921

CollapseCalendarView.java
只需要将该控件引入到布局文件中
package com.eroad.widget.calendar;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

import org.joda.time.LocalDate;
import org.json.JSONObject;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.eroad.widget.calendar.manager.CalendarManager;
import com.eroad.widget.calendar.manager.CalendarManager.State;
import com.eroad.widget.calendar.manager.Day;
import com.eroad.widget.calendar.manager.Month;
import com.eroad.widget.calendar.manager.ResizeManager;
import com.eroad.widget.calendar.manager.Week;
import com.eroad.widget.calendar.widget.DayView;
import com.eroad.widget.calendar.widget.WeekView;
import com.example.calendarnew.R;

/**
* 日历View
* @author MaJian
*
*/
@SuppressLint({ “SimpleDateFormat”, “NewApi” }) public class CollapseCalendarView extends LinearLayout implements View.OnClickListener {

public static final String TAG = "CalendarView";

private CalendarManager mManager;

private TextView mTitleView;
private ImageButton mPrev;
private ImageButton mNext;
private LinearLayout mWeeksView;

private final LayoutInflater mInflater;
private final RecycleBin mRecycleBin = new RecycleBin();

private OnDateSelect mListener;
private TextView mSelectionText;
private LinearLayout mHeader;
private ResizeManager mResizeManager;
private ImageView mIvPre;
private ImageView mIvNext;
private Animation left_in;
private Animation right_in;
private boolean initialized;
private String[] weeks;
private OnTitleClickListener titleClickListener;

private JSONObject dataObject;                          //日历数据源
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private boolean showChinaDay = true;                    //是否显示农历日期

public CollapseCalendarView(Context context) {
    this(context, null);
    onFinishInflate();
}

public void showChinaDay(boolean showChinaDay){
    this.showChinaDay = showChinaDay;
    populateLayout();
}

/**
 * 设置标题点击监听器
 * @param titleClickListener
 */
public void setTitleClickListener(OnTitleClickListener titleClickListener){
    this.titleClickListener = titleClickListener;
}

public CollapseCalendarView(Context context, AttributeSet attrs) {
    this(context, attrs, R.attr.calendarViewStyle);
}

public void setArrayData(JSONObject jsonObject){
    this.dataObject = jsonObject;
}

public interface OnTitleClickListener{
    public void onTitleClick();
}

@SuppressLint("NewApi")
public CollapseCalendarView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    weeks = getResources().getStringArray(R.array.weeks);
    mInflater = LayoutInflater.from(context);
    mResizeManager = new ResizeManager(this);
    inflate(context, R.layout.calendar_layout, this);
    setOrientation(VERTICAL);
    setBackgroundColor(getResources().getColor(R.color.cal_color_white));
    mIvPre = new ImageView(getContext());
    mIvNext = new ImageView(getContext());
    RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
    mIvPre.setLayoutParams(param);
    mIvNext.setLayoutParams(param);
    initAnim();
}

/**
 * 初始化左右滑动动画
 */
private void initAnim(){
    left_in = AnimationUtils.makeInAnimation(getContext(), true);
    right_in = AnimationUtils.makeInAnimation(getContext(), false);
}

/**
 * 初始化日历管理器
 * @param manager 日历管理器对象
 */
public void init(CalendarManager manager) {
    if (manager != null) {
        mManager = manager;
        if (mListener != null) {
            mListener.onDateSelected(mManager.getSelectedDay());
        }
        populateLayout();

    }
}
/**
 * 切换到指定某天界面
 * @param date yyyy-MM-dd
 */
public void changeDate(String date){
    if (date.compareTo(mManager.getSelectedDay().toString()) > 0) {
        this.setAnimation(right_in);
        right_in.start();
    } else if (date.compareTo(mManager.getSelectedDay().toString()) < 0) {
        this.setAnimation(left_in);
        left_in.start();
    }
    try {
        mManager.init(LocalDate.fromDateFields(sdf.parse(date)));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    init(mManager);
}


public CalendarManager getManager() {
    return mManager;
}

@Override
public void onClick(View
android-collapse-calendar-view-可以在月视图与周视图之间切换的日期控件.zip 可以在月视图与周视图之间切换的calendar控件项目地址:https://github.com/blazsolar/android-collapse-calendar-view 立即下载

相关推荐

Android横向滑动日历

本例子是单行横向滑动日历,只显示一行日历,利用ViewFlipper动态添加和删除GridView达到资源合理利用,滑动过程顺畅

AGV、RGV、四向车openTCS调度系统(三)车辆适配器解读,封装自己的适配器

AGV、RGV、四向车调度。理解适配器的整体作用,以及如何使用官方例子改造自己的适配器,

要这头发有何用 3610

用Keil5给CH552G编程:手把手配置8051开发环境+LED闪烁实战

本文详细介绍了如何使用Keil5为CH552G单片机配置8051开发环境,并完成LED闪烁实战。从获取必要软件、安装WCH器件库到创建工程、编写程序及烧录,手把手指导开发者避开常见陷阱,特别适合从STC转向CH552G的开发者。

weixin_30733003的博客 538

Avellaneda & Stoikov’s market-making strategy AS模型的通俗理解篇(一)

δa, δb = bid/ask spread, symmetrical → δa=δb 也就是一段时间内,这个midprice 上蹿下跳的幅度计算,其实做市也就是一种网格,或者说类似布林带,我们经过计算在底部放买单,在高点放一个卖单,如果上下都成交了,那么仓位不变,你把利差赚了。一般来说在震荡行情中,很适合做市,特别是波动率不高情况下,我们通过AS的经典论文得到2个最关键公式,下面来解读一下这个公式的含义,如何在hummingbot 策略中如何设置这些参数。如果单边上涨,你就无货可卖,俗称卖飞了。

weixin_42480337的博客 1万+

达梦7实时主备集群

达梦7实时主备配置实时主备数据环境说明配置主库配置 dm.ini配置dmmal.ini配置dmarch.ini配置dmwatcher.ini配置dmwatcher.ini以mount方式启动主库设置OGUID修改数据库为primary模式配置备库 在服务器部署过程中,通常搭建有数据库主备集群,用于防备数据库服务器产生问题影响数据正常,在此,我们分享一下在虚拟机环境中模拟搭建实时主备的数据守护模式。 在搭建环境之前,需用户确认主备DM7的数据库已安装完成,且版本一致,同时还应注意各实例所在主机的操作系统位数、

g360382的博客 1022

南京银行信息技术岗提前批笔试与面试

1、笔试 笔试大致可以分为三部分:性格测试、行测题目、专业知识 性格测试 性格测试一般会有较多的体量,可能一共大概有一百多道接近两百道的样子,这个是不限时的。 前面有100道是这样的题目,就是有四个选项都是各种形容词,然后分别选出最符合自己的与最不符合自己的选项。这种题你就顺着自己的潜意识填就行了,但是前后要一致,我怀疑他出这么多题,可能就是考一考你记不记得前面填了啥。比如你做到第90题的时候,可能会出现和前面第2题类似的四个形容词,更有甚者就是一模一样的,你要对自己之前选的什么有个比较清楚的记忆。

qq_40971025的博客 6921

基于 Qt C++ 的 2D 动画制作工具

你可以修改它的中心坐标 (X, Y)、宽度 (W)、高度 (H),或点击 "选择颜色" 按钮改变其填充色。* **图形视图 (`QGraphicsView` 和 `QGraphicsScene`)**: 用于显示和编辑当前帧的内容。

寒寒豆豆软件公司的博客 114

CAN 通信测试工具 canutils

概述 CAN,Controller Area Network,控制器局域网,一种高可靠性的现场总线。广泛用于汽车电子、工业控制通信。 canutils 工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。这几个程序的功能简述如下: canconfig:用于配置 CAN 总线接口的参数,主要是波特率和模式。 candump...

一个软件工程师的技术笔记 1万+

支付域——账户系统设计

本文详细介绍了支付域中的账户系统设计,包括账户的定义、核心特征、常见类型以及在支付系统中的作用。账户是支付平台为用户、商户等主体建立的资金记录单元,具有资金归属、余额管理、交易流水、资金安全等核心特征。常见账户类型包括用户账户、商户账户、平台账户、保证金账户等。此外,还探讨了账户与银行账户的区别、账户的结构设计、如何设计账户类型以及账户系统设计等内容。

庄小焱 1189

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 如何写文件到/data/data/packagename/files中
下一篇: Android实现高斯模糊
随便想个名字
博客等级 码龄14年 28粉丝 21原创
评论 33
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值