高仿钉钉和小米的日历控件

CalendarExaple

项目地址: codbking/CalendarExaple
简介:高仿钉钉和小米的日历控件
更多: 作者    提 Bug    示例 APK   
标签:
CalendarView- ViewPager+Gridview- 日历控件-

关注我

githup:https://github.com/codbking

csdn: http://my.csdn.net/codbking


简介

这是一个高仿钉钉和小米的日历控件,支持快速滑动,界面缓存。想要定制化 UI,使用起来非常简单,就像使用 ListView 一样

一些特点:

  1. 可以自定义日历控件 UI
  2. 支持快速滑动
  3. 支持农历和阳历
  4. 界面 UI 缓存和日历数据缓存
  5. 扩展 view 支持 listView 的滑动

效果

apk 下载

  • 先上两张 demo 的效果图,分别是仿小米和钉钉日历效果图

 

  • 再看下交互效果

Alt text

how to use

  • Add it in your root build.gradle at the end of repositories:
        allprojects {
           repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
        }
  • Add the dependency
    dependencies {
            compile 'com.github.codbking:CalendarExaple:v1.0.0'
    }
    
  • 在 layout 的 xml 中添加 CalendarLayout 和 CalendarDateView

    注意:CalendarDateView 一定是 CalendarLayout 第一个 view,扩展 view 必须是 CalendarDateView 第二个 view

     <com.codbking.calendar.CalendarLayout
          android:layout_width="match_parent"
          android:layout_height="0dp"
          android:layout_weight="1"
          >
    
          <com.codbking.calendar.CalendarDateView
              android:id="@+id/calendarDateView"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>
    
          <ListView
              android:id="@+id/list"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="#ffffff"
              />
    
      </com.codbking.calendar.CalendarLayout>
    
  • 在你的 java 文件中设置 CalendarDateView 的 CaledarAdapter 和 CalendarView.OnItemClickListener 监听

    注意:想要设置选中效果,只需设置 CaledarAdapter 中的 view 的选中背景

         mCalendarDateView.setAdapter(new CaledarAdapter() {
              @Override
              public View getView(View convertView, ViewGroup parentView, CalendarBean bean) {
                  //判断 convertView 为 null,可以有效利用 view 的回收重用,左右滑动的效率高
                  if (convertView == null) {
                      convertView = LayoutInflater.from(parentView.getContext()).inflate(R.layout.item_xiaomi, null);
                  }
    
                  TextView chinaText = (TextView) convertView.findViewById(R.id.chinaText);
                  TextView text = (TextView) convertView.findViewById(R.id.text);
    
                  text.setText("" + bean.day);
                  //mothFlag 0 是当月,-1 是月前,1 是月后
                  if (bean.mothFlag != 0) {
                      text.setTextColor(0xff9299a1);
                  } else {
                      text.setTextColor(0xff444444);
                  }
                  chinaText.setText(bean.chinaDay);
    
                  return convertView;
              }
          });
    
          mCalendarDateView.setOnItemClickListener(new CalendarView.OnItemClickListener() {
              @Override
              public void onItemClick(View view, int postion, CalendarBean bean) {
                  mTitle.setText(bean.year + "/" + bean.moth + "/" + bean.day);
              }
          });
    

联系我

email:codbking@gmail.com

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果想要实现一个类似于 Android 官方的 RecyclerView 控件,可以使用以下步骤: 1. 添加依赖库 在项目的 build.gradle 文件中添加以下依赖库: ```groovy implementation 'androidx.recyclerview:recyclerview:1.1.0' ``` 2. 创建布局文件 创建一个 RecyclerView 布局文件,例如: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 创建适配器 创建一个适配器来管理 RecyclerView 中的数据和视图。您可以扩展 `RecyclerView.Adapter` 类并实现以下方法: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_layout, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { String item = mData.get(position); holder.textView.setText(item); } @Override public int getItemCount() { return mData.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { TextView textView; public MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } } ``` 4. 设置布局管理器和适配器 在 Activity 或 Fragment 中,您需要设置一个布局管理器和适配器来控制 RecyclerView。例如: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); List<String> data = new ArrayList<>(); data.add("Item 1"); data.add("Item 2"); data.add("Item 3"); MyAdapter adapter = new MyAdapter(data); recyclerView.setAdapter(adapter); ``` 5. 自定义滚动效果 如果您想要实现自定义的滚动效果,您可以使用 `RecyclerView.ItemDecoration` 类。例如,以下代码将在 RecyclerView 中添加一个分隔线: ```java public class DividerItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; public DividerItemDecoration(Context context) { mDivider = ContextCompat.getDrawable(context, R.drawable.divider); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { int left = parent.getPaddingLeft(); int right = parent.getWidth() - parent.getPaddingRight(); int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int top = child.getBottom() + params.bottomMargin; int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } } ``` 然后,您可以在 Activity 或 Fragment 中设置这个装饰器: ```java RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); List<String> data = new ArrayList<>(); data.add("Item 1"); data.add("Item 2"); data.add("Item 3"); MyAdapter adapter = new MyAdapter(data); recyclerView.setAdapter(adapter); recyclerView.addItemDecoration(new DividerItemDecoration(this)); ``` 这样,您就可以实现一个类似 Android 官方的 RecyclerView 控件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值