2023年7月15日发(作者:)
Android定制⽇历,⽀持周⽉切换,⽇期标记,农历显⽰,节假⽇
只需要将该控件引⼊到布局⽂件中
package ar;import xception;
import DateFormat;
import List;
import ;
import ;import ate;
import ject;import ssLint;
import t;
import ;
import ils;
import uteSet;
import Inflater;
import Event;
import ;
import ion;
import ionUtils;
import utton;
import iew;
import Layout;
import veLayout;
import ew;import arManager;
import ;
import ;
import ;
import Manager;
import ;
import w;
import ew;
import arnew.R;/**
* ⽇历View
* @author MaJian
*
*/
@SuppressLint({ “SimpleDateFormat”, “NewApi” }) public class CollapseCalendarView extends LinearLayout kListener {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 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){ inaDay = showChinaDay; populateLayout();}/** * 设置标题点击监听器 * @param titleClickListener */public void setTitleClickListener(OnTitleClickListener titleClickListener){ lickListener = titleClickListener;}public CollapseCalendarView(Context context, AttributeSet attrs) { this(context, attrs, arViewStyle);}public void setArrayData(JSONObject jsonObject){ ject = jsonObject;}public interface OnTitleClickListener{ public void onTitleClick();}@SuppressLint("NewApi")public CollapseCalendarView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); weeks = getResources().getStringArray(); mInflater = (context); mResizeManager = new ResizeManager(this); inflate(context, ar_layout, this); setOrientation(VERTICAL); setBackgroundColor(getResources().getColor(_color_white)); mIvPre = new ImageView(getContext()); mIvNext = new ImageView(getContext()); Params param = new Params(_PARENT, _CONTENT); outParams(param); outParams(param); initAnim();}}/** * 初始化左右滑动动画 */private void initAnim(){ left_in = Animation(getContext(), true); right_in = Animation(getContext(), false);}/** * 初始化⽇历管理器 * @param manager ⽇历管理器对象 */public void init(CalendarManager manager) { if (manager != null) { mManager = manager; if (mListener != null) { Selected(ectedDay()); } populateLayout(); }}/** * 切换到指定某天界⾯ * @param date yyyy-MM-dd */public void changeDate(String date){ if (eTo(ectedDay().toString()) > 0) { mation(right_in); right_(); } else if (eTo(ectedDay().toString()) < 0) { mation(left_in); left_(); } try { (teFields((date))); } catch (ParseException e) { // TODO Auto-generated catch block tackTrace(); } init(mManager);}public CalendarManager getManager() { return mManager;}@Overridepublic void onClick(View v) { if (mManager != null) { int id = (); if (id == ) { prev(); } else if (id == ) { next(); } else if (id == ) { if (titleClickListener != null) { eClick(); } } }}@SuppressLint("WrongCall")@Overrideprotected void dispatchDraw( Canvas canvas) { (); chDraw(canvas);}public getState() { if (mManager != null) { return te(); } else { return null; }}public void setDateSelectListener(OnDateSelect listener) { mListener = listener;}/** * 设置⽇历标题 * @param text */public void setTitle(String text) { if (y(text)) { ibility(E); ibility(); } else { ibility(); ibility(E); t(text); }}/** * 显⽰⽇历⾃带标题 */public void showHeader(){ ibility(E);}/** * 隐藏⽇历⾃带标题 */public void hideHeader(){ ibility();}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) { return rceptTouchEvent(ev);}@Overridepublic boolean onTouchEvent( MotionEvent event) { hEvent(event); return hEvent(event);}/** * 周-⽉ */public void weekToMonth(){ if (te() == ) { View(); }}}/** * ⽉-周 */public void monthToWeek(){ if (te() == ) { View(); }}@Overrideprotected void onFinishInflate() { shInflate(); mTitleView = (TextView) findViewById(); lickListener(this); mPrev = (ImageButton) findViewById(); mNext = (ImageButton) findViewById(); mWeeksView = (LinearLayout) findViewById(); mHeader = (LinearLayout) findViewById(); mSelectionText = (TextView) findViewById(ion_title); lickListener(this); lickListener(this); populateLayout();}/** * 绘制⽇历周标题 */private void populateDays() { if (!initialized) { CalendarManager manager = getManager(); if (manager != null) { LinearLayout layout = (LinearLayout) findViewById(); for (int i = 0; i < 7; i++) { TextView textView = (TextView) ldAt(i); t(weeks[i]); if (i > 4) { tColor(getResources().getColor(_blue_dark)); } } initialized = true; } }}/** * 刷新⽇历View */public synchronized void populateLayout() { if (mManager != null) { populateDays(); if (mPrev != null) { bled(v()); bled(t()); t(derText()); if (te() == ) { populateMonthLayout((Month) ts()); } else { populateWeekLayout((Week) ts()); } } }}/**/** * 刷新⽇历Month View * @param month ⽉份 */private void populateMonthLayout(Month month) { List
&& e().getMonthOfYear() == rentMonthDate().getMonthOfYear() || te() == ) { //如果⽇期是当前⽉份 if (i > 4) { //周末 tColor(getResources().getColor(_blue_dark)); tColor(getResources().getColor(_blue_dark)); } else { //⾮周末 tColor(getResources().getColor(_text_normal)); tColor(getResources().getColor(_text_normal)); } } else { //⽇期不是当前⽉份 if (i > 4) { //周末 tColor(getResources().getColor(_blue_light)); tColor(getResources().getColor(_blue_light)); } else { //⾮周末 tColor(getResources().getColor(_line_grey)); tColor(getResources().getColor(_line_grey)); } } ected(cted()); if (e().equals(ay()) && cted()) { //⽇期对象是今天,并且被选中 if (e().getYear() == rentMonthDate().getYear()
&& e().getMonthOfYear() == rentMonthDate().getMonthOfYear()) { //如果⽇期是当前⽉份 if (i > 4) { //周末 tColor(getResources().getColorStateList(_calendar_week)); tColor(getResources().getColorStateList(_calendar_week)); } else { //⾮周末 tColor(getResources().getColorStateList(_calendar)); tColor(getResources().getColorStateList(_calendar)); } } else { //⽇期不是当前⽉份 if (i > 4) { //周末 tColor(getResources().getColorStateList(_calendar_week_out_month)); tColor(getResources().getColorStateList(_calendar_week_out_month)); } else { //⾮周末 tColor(getResources().getColorStateList(_calendar_out_month)); tColor(getResources().getColorStateList(_calendar_out_month)); } } kground(getResources().getDrawable(_btn_calendar_today_selected)); kground(getResources().getDrawable(_calendar_point_white)); ected(true); ected(true); } else if (e().equals(ay())) { //⽇期对象今天 kground(getResources().getDrawable(_calendar_point_blue)); kground(getResources().getDrawable(_btn_calendar_today)); ected(true); } else { //⽇期对象被选中 kground(getResources().getDrawable(_calendar_point_blue)); kground(getResources().getDrawable(_btn_calendar)); } rent(ent()); boolean enables = led(); bled(enables); if (enables) { // 解除点击限制,所有的都可以点击 lickListener(new OnClickListener() { @Override public void onClick(View v) { LocalDate date = e(); if (te() == ) { //判断当前视图状态为⽉份视图 if (r() > rentMonthDate().getYear()) { //选中⽇期年份⼤于当前显⽰年份 next(); } else if (r() < rentMonthDate().getYear()) { //选中⽇期年份⼩于当前显⽰年份 prev(); } else { //选中⽇期年份等于当前显⽰年份 if (thOfYear() > rentMonthDate().getMonthOfYear()) { //选中⽉份⼤于当前⽉份 next(); } else if (thOfYear() < rentMonthDate().getMonthOfYear()) { //选中⽉份⼩于当前⽉份 prev(); } } } if (Day(date)) { populateLayout(); if (mListener != null) { //执⾏选中回调 Selected(date); } } } }); } else { lickListener(null); } }}/** * 翻转到前⼀页 */public void prev(){ if (()) { populateLayout(); } if (mListener != null) { //执⾏选中回调 Selected(ectedDay()); } } mation(left_in); left_();}/** * 翻转到下⼀页 */public void next(){ if (()) { populateLayout(); } if (mListener != null) { //执⾏选中回调 Selected(ectedDay()); } mation(right_in); right_();}public LinearLayout getWeeksView() { return mWeeksView;}private WeekView getWeekView(int index) { int cnt = ldCount(); if(cnt < index + 1) { for (int i = cnt; i < index + 1; i++) { View view = getView(); w(view); } } return (WeekView) ldAt(index);}private View getView() { View view = eView(); if (view == null) { view = e(_layout, this, false); } else { ibility(E); } return view;}private void cacheView(int index) { View view = ldAt(index); if(view != null) { ViewAt(index); w(view); }}public LocalDate getSelectedDate() { return ectedDay();}@Overrideprotected void onDetachedFromWindow() { chedFromWindow(); e(); e();}private class RecycleBin { private final Queue
基本的事件处理以及监听器的使⽤
package ar;import DateFormat;
import ar;import ate;
import ray;
import ject;import ty;
import ;
import ;
import kListener;
import ;import Select;
import eClickListener;
import arManager;
import hChangeListener;
import arnew.R;
/**
* Main
* @author MaJian
*
*/
public class MainActivity extends Activity {private CollapseCalendarView calendarView;private CalendarManager mManager;private JSONObject json;private SimpleDateFormat sdf;private boolean show = false;@Overrideprotected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub te(savedInstanceState); setContentView(ty_main); sdf = new SimpleDateFormat("yyyy-MM-dd"); calendarView = (CollapseCalendarView) findViewById(ar); mManager = new CalendarManager((), mManager = new CalendarManager((), , ().withYear(100), ().plusYears(100)); //⽉份切换监听器 thChangeListener(new OnMonthChangeListener() { @Override public void monthChange(String month, LocalDate mSelected) { // TODO Auto-generated method stub xt(, month, _SHORT).show(); } }); /** * ⽇期选中监听器 */ eSelectListener(new OnDateSelect() { @Override public void onDateSelected(LocalDate date) { // TODO Auto-generated method stub xt(, ng(), _SHORT).show(); } }); leClickListener(new OnTitleClickListener() { @Override public void onTitleClick() { // TODO Auto-generated method stub xt(, "点击标题", _SHORT).show(); } }); //回到今天 findViewById(_today).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Date(().toString()); } }); //周⽉切换 findViewById(_changemode).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub View(); teLayout(); } }); //显⽰或者隐藏农历 findViewById(_hide).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub inaDay(show); show = !show; } }); Calendar cal = tance(); (, 9); (_OF_MONTH, 0); json = new JSONObject(); try { try { for (int i = 0; i < 30; i++) { JSONObject jsonObject2 = new JSONObject(); if (i <= 6) { ("type", "休"); } else if ( i > 6 && i< 11) { ("type", "班"); } if (i%3 == 0) { ("list", new JSONArray()); } ((e()), jsonObject2); (_OF_MONTH, 1); } } catch (Exception e) { // TODO: handle exception tackTrace(); } //设置数据显⽰ ayData(json); //初始化⽇历管理器 (mManager);}}布局⽂件源码
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689429151a246748.html
评论列表(0条)