今天给大家介绍一个自定义的日历控件,代码太多了,具体我就不去介绍,我下面只介绍如何使用,并且可以更改的地方。然后就可以达到自己需要的目的即可。
效果图如下:
首先在BaseCalendar里面的onCreate方法里面看看,代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(generateContentView());
setContentView(R.layout.main);
layout1=(LinearLayout)findViewById(R.id.layout1);
//加载日历控件
layout1.addView(generateContentView());
UpdateStartDateForMonth();
//效果文件
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this,R.anim.slide_right_out);
slideLeftIn.setAnimationListener(animationListener);
slideLeftOut.setAnimationListener(animationListener);
slideRightIn.setAnimationListener(animationListener);
slideRightOut.setAnimationListener(animationListener);
mGesture = new GestureDetector(this, new GestureListener());
}
如上面的代码所示,我们可以看到这个这个方法里面做了一些效果文件,当然大家也可以使用其他的效果文件,还有主要的是layout1.addview()这个方法,它添加就是这个日历控件了,所以大家应该明白,这意味着什么,只要大家定义一个layout在任何情况下都可以引用这个日历控件,开发起来比较方便。
还有一个回调方法也是比较重要的,这个方法可以得到当前的是某个月的几号。代码如下:
<span style="white-space:pre"> </span>@Override
public boolean onSingleTapUp(MotionEvent e) {
// ListView lv = getListView();
//得到当前选中的是第几个单元格
int pos = gView2.pointToPosition((int) e.getX(), (int) e.getY());
LinearLayout txtDay = (LinearLayout) gView2.findViewById(pos + 5000);
// TextView txtDay=(TextView)gView2.findViewById(pos+5000);
if (txtDay != null) {
if (txtDay.getTag() != null) {
Date date = (Date) txtDay.getTag();
calSelected.setTime(date);
gAdapter.setSelectedDate(calSelected);
gAdapter.notifyDataSetChanged();
<span style="white-space:pre"> </span>
gAdapter1.setSelectedDate(calSelected);
gAdapter1.notifyDataSetChanged();
gAdapter3.setSelectedDate(calSelected);
gAdapter3.notifyDataSetChanged();
}
}
Log.i("TEST", "onSingleTapUp - pos=" + pos);
View view=(View)txtDay;
TextView tv=(TextView)view.findViewById(pos+500);//获得控件TextView,用于后面的Toast提示,当然可以自己定义一个TextView显示在控件上
// tv.setBackgroundColor(Color.BLUE);
Toast.makeText(BaseCalendar.this, tv.getText(), Toast.LENGTH_SHORT).show();
return false;
}
}
上面的代码主要还是最后那几句话,当然大家不需要理解,只要拿过来用就行了。
最后提醒大家的是,如果想改这个日历的颜色或者日历上的字体颜色边框等等,都可以在color.xml里面改,这里不做过多的解释,demo里面注释的也比较详细。
源码下载地址:http://download.youkuaiyun.com/detail/u014128885/8777097