安卓实现签到日历
安卓实现签到日历
一 需求分析
日历支持左右滑动
日历需要在具体日期下面展示签到情况的标识,例如 异常 正常
点击日期查看当天的签到情况、在日历下方以列表展示
二 图文展示
三 实现思路
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组装电脑配置单推荐报价格
上传时间: 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 |