您现在的位置是:首页 > 数码 > 

安卓实现签到日历

2025-07-23 02:32:39
安卓实现签到日历 一  需求分析         日历支持左右滑动         日历需要在具体日期下面展示签到情况的标识,例如 异常 正常         点击日期查看当天的签到情况、在日历下方以列表展示 二    图文展示        三 实现思路   1 最外层:scrollview包裹 需要自定义 避免滑动冲突              

安卓实现签到日历

一  需求分析

        日历支持左右滑动

        日历需要在具体日期下面展示签到情况的标识,例如 异常 正常

        点击日期查看当天的签到情况、在日历下方以列表展示

二    图文展示

      

三 实现思路

  1 最外层:scrollview包裹 需要自定义 避免滑动冲突

             

public class ObservableScrollView extends ScrollView {private int downX;private int downY;private int mTouchSlop;private OnScollChangedListener onScollChangedListener = null;public ObservableScrollView(Context context) {super(context);mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}public ObservableScrollView(Context context, AttributeSet attrs) {super(context, attrs);mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}public void setOnScollChangedListener(OnScollChangedListener onScollChangedListener) { = onScollChangedListener;}@Overrideprotected void onScrollChanged(int x, int y, int oldx, int oldy) {(x, y, oldx, oldy);if (onScollChangedListener != null) {(this, x, y, oldx, oldy);}}@Overridepublic boolean onInterceptTouchEvent(MotionEvent e) {int action = e.getAction();switch (action) {case MotionEvent.ACTIO_DOW:downX = (int) e.getRawX();downY = (int) e.getRawY();break;case MotionEvent.ACTIO_MOVE:int moveY = (int) e.getRawY();if (Math.abs(moveY - downY) > mTouchSlop) {return true;}default:}return (e);}public interface OnScollChangedListener {void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);}}

  

  2 日历部分: monthview  dayView组成   dayview与monthview的组成比较简单,可以通过自定义组件 或者 xml都可以实现

                    实现左右滑动:viewpager/flipper  

/*** ViewPager wrapContent解决方案* 用于gradview *6 注意*/
public class CalendarViewPager extends ViewPager {private OnViewpagerListener onViewpagerListener;public void setOnViewpagerListener(OnViewpagerListener onViewpagerListener) { = onViewpagerListener;}public CalendarViewPager(Context context) {super(context);init();}public CalendarViewPager(Context context, AttributeSet attrs) {super(context, attrs);init();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {(widthMeasureSpec, heightMeasureSpec);int height = 0;for (int i = 0; i < getChildCount(); i) {View child = getChildAt(i);(widthMeasureSpec, (0, MeasureSpec.USPECIFIED));int h = child.getMeasuredHeight() * 6;if (h > height)height = h;}heightMeasureSpec = (height, MeasureSpec.EXACTLY);(widthMeasureSpec, heightMeasureSpec);}private void init() {//此处设置为500初始化setAdapter(new PagerAdapter() {@Overridepublic int getCount() {return 1000;}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic int getItemPosition(@onull Object object) {View view = (View) object;int currentPage = getCurrentItem(); // Get current page indexif (currentPage == (Integer) view.getTag()) {return POSITIO_OE;} else {return POSITIO_UCHAGED;}}@Overridepublic Object instantiateItem(ViewGroup container, final int position) {GridView  = initCalendar(position);.setTag(position);container.addView();return ;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}});}private GridView initCalendar(int position) {LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(AbsListView.LayoutParams.MATCH_PARET, AbsListView.LayoutParams.WRAP_COTET);GridView gView = new GridView(getContext());gView.setLayoutParams(params);gView.setumColumns(7);gView.setGravity(Gravity.CETER);gView.setSelector(new ColorDrawable(Color.TRASPARET));gView.setBackgroundColor(getResources().getColor(android.));DayAdapter dayAdapter = new DayAdapter(getContext());gView.setAdapter(dayAdapter);dayAdapter.setOnItemSelectListener(new DayAdapter.OnItemSelectListener() {@Overridepublic void onSelectItem(String day) {(day);}});Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(Calendar.MOTH, position - 500);int y = calendar.get(Calendar.YEAR);int m = calendar.get(Calendar.MOTH)  1;int d = calendar.get(Calendar.DATE);List<CalendarBean> dayItemList = CalendarFactory.getMonthOfDayList(y, m);dayAdapter.setList(dayItemList);return gView;}public interface OnViewpagerListener {void onChildViewChange(String day);}}

   

  列表部分 listview/ recyclewview  根据当前的年月日请求后台数据

 

 链接: 

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/767869.html

相关标签:无
上传时间: 2023-12-27 15:04:57
留言与评论(共有 16 条评论)
本站网友 th000
17分钟前 发表
attrs);init();}@Overrideprotected void onMeasure(int widthMeasureSpec
本站网友 新生毛发种植研究院
22分钟前 发表
AbsListView.LayoutParams.WRAP_COTET);GridView gView = new GridView(getContext());gView.setLayoutParams(params);gView.setumColumns(7);gView.setGravity(Gravity.CETER);gView.setSelector(new ColorDrawable(Color.TRASPARET));gView.setBackgroundColor(getResources().getColor(android.));DayAdapter dayAdapter = new DayAdapter(getContext());gView.setAdapter(dayAdapter);dayAdapter.setOnItemSelectListener(new DayAdapter.OnItemSelectListener() {@Overridepublic void onSelectItem(String day) {(day);}});Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(Calendar.MOTH
本站网友 孕32周
13分钟前 发表
oldy);}}@Overridepublic boolean onInterceptTouchEvent(MotionEvent e) {int action = e.getAction();switch (action) {case MotionEvent.ACTIO_DOW
本站网友 青岛海事大学
23分钟前 发表
heightMeasureSpec);}private void init() {//此处设置为500初始化setAdapter(new PagerAdapter() {@Overridepublic int getCount() {return 1000;}@Overridepublic boolean isViewFromObject(View view
本站网友 2014年315晚会
5分钟前 发表
attrs
本站网友 西安市房屋出租
18分钟前 发表
MeasureSpec.EXACTLY);(widthMeasureSpec
本站网友 血管性血友病因子
8分钟前 发表
Object object) {return view == object;}@Overridepublic int getItemPosition(@onull Object object) {View view = (View) object;int currentPage = getCurrentItem(); // Get current page indexif (currentPage == (Integer) view.getTag()) {return POSITIO_OE;} else {return POSITIO_UCHAGED;}}@Overridepublic Object instantiateItem(ViewGroup container
本站网友 左洛复
29分钟前 发表
Object object) {container.removeView((View) object);}});}private GridView initCalendar(int position) {LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(AbsListView.LayoutParams.MATCH_PARET
本站网友 泰铢汇率对人民币
8分钟前 发表
attrs);init();}@Overrideprotected void onMeasure(int widthMeasureSpec
本站网友 江门地王广场
27分钟前 发表
AttributeSet attrs
本站网友 祝福网页
13分钟前 发表
position - 500);int y = calendar.get(Calendar.YEAR);int m = calendar.get(Calendar.MOTH)  1;int d = calendar.get(Calendar.DATE);List<CalendarBean> dayItemList = CalendarFactory.getMonthOfDayList(y
本站网友 俱乐部排名
29分钟前 发表
downX = (int) e.getRawX();downY = (int) e.getRawY();break;case MotionEvent.ACTIO_MOVE
本站网友 石家庄培训班
27分钟前 发表
defStyle);mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();}public void setOnScollChangedListener(OnScollChangedListener onScollChangedListener) { = onScollChangedListener;}@Overrideprotected void onScrollChanged(int x
本站网友 44519
12分钟前 发表
position - 500);int y = calendar.get(Calendar.YEAR);int m = calendar.get(Calendar.MOTH)  1;int d = calendar.get(Calendar.DATE);List<CalendarBean> dayItemList = CalendarFactory.getMonthOfDayList(y
本站网友 江湖之路
11分钟前 发表
heightMeasureSpec);int height = 0;for (int i = 0; i < getChildCount(); i) {View child = getChildAt(i);(widthMeasureSpec