最近在做一个应用,主界面是一个日历,网上有很多第三方的日历控件,有使用ImageView实现的,有使用GridView实现的,好处是可以灵活的控制.

而我选择了使用原生的CalendarView,关于这个控件,具体可以参考:http://android.toolib.net/reference/android/widget/CalendarView.html

缺点是没有提供周分隔线的自定义图片的方法,下面的代码是android画周分隔线的代码,最初我想要重写这个方法来自定义图片.后来我发现这个

方法是定义在CalendarView的私有内部类WeekView中的...有兴趣的同学可以研究一下怎么实现,顺便请@我 ^ ^

        /*** Draws a horizontal line for separating the weeks.** @param canvas The canvas to draw on.*/private void drawWeekSeparators(Canvas canvas) {// If it is the topmost fully visible child do not draw separator lineint firstFullyVisiblePosition = mListView.getFirstVisiblePosition();if (mListView.getChildAt(0).getTop() < 0) {firstFullyVisiblePosition++;}if (firstFullyVisiblePosition == mWeek) {return;}mDrawPaint.setColor(mWeekSeparatorLineColor);mDrawPaint.setStrokeWidth(mWeekSeperatorLineWidth);float startX;float stopX;if (isLayoutRtl()) {startX = 0;stopX = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth;} else {startX = mShowWeekNumber ? mWidth / mNumCells : 0;stopX = mWidth;}canvas.drawLine(startX, 0, stopX, 0, mDrawPaint);}

下面我来说怎么通过选择图片来替换CalendarView的背景:

<CalendarViewandroid:id="@+id/date"android:layout_width="match_parent"android:layout_height="wrap_content"android:focusedMonthDateColor="@android:color/holo_purple"android:background="@android:color/background_light"android:showWeekNumber="false"android:selectedWeekBackgroundColor="@color/touming"android:weekSeparatorLineColor="@color/touming"android:dateTextAppearance="@android:style/TextAppearance.Large"android:shownWeekCount="5"android:unfocusedMonthDateColor="@color/pink"android:selectedDateVerticalBar="@drawable/xxxx"/>

首先定义一个CalendarView,然后在你的java代码中获取它-->

mCalendarView = (CalendarView) findViewById(R.id.date);

然后你可以弄一个按钮或者其它的什么,绑定上它的事件,来触发我们切换到pic选择-->

Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 0);

这个方法选择完,会回调这个方法,所以你要重写这个-->

        @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(requestCode==0&&resultCode==RESULT_OK&&null!=data){Uri selectedBGPath = data.getData();//store BGpath to BGSPBGSP sp = new BGSP(MainActivity.this);sp.writeOneString("bgPath", selectedBGPath.toString());//-----------------------------------------------------this.setCalendarBG(selectedBGPath);}}

其中data是你选择的图片的Uri,大概是(Content:\\... 好像是这样的),为了重新打开应用时可以保存设置,我们要用SharedPreferences来保存这个路径.

下来我们要设置CalendarView的背景-->

        //设置选择的URI到背景@SuppressLint("NewApi")private void setCalendarBG(Uri uri){Drawable drw = ImageOperations(uri,"");mCalendarView.setBackground(drw);}

其中可以看到把uri转换成Drawable的方法,这个方法是我在网上copy的,但是在我这没有问题:

private Drawable ImageOperations(Uri url, String saveFilename) {InputStream is = null;try {is = getContentResolver().openInputStream(url);Drawable d = Drawable.createFromStream(is, saveFilename);return d;} catch (IOException e) {return null;}finally{try {if(is!=null){is.close();}} catch (IOException e) {e.printStackTrace();}}
}

当然is是我关闭的...

最后在activity启动的时候,加入下面的代码,用来判断应用是否已经自定义过背景:

        /*** 初始化日历背景*/private void initCalendarBG(){BGSP sp = new BGSP(MainActivity.this);String bgpath = sp.getOneString("bgPath");if(!bgpath.equals(BGSP.DEFAULT_VALUE)){this.setCalendarBG(Uri.parse(bgpath));}}

至此,就基本成型了...

写的比较乱,如果有谁想具体了解,就在下面评论一下 ^ ^

给你们看看效果是这样的:(另外我自定义了日期选择两边的bar...)

更改Calendar的背景图片(使用系统图片选择器)相关推荐

  1. 怎么更改锁定计算机背景图片,电脑锁屏背景图片如何更改

    笔者教你更改电脑锁屏壁纸,简单,一看就会. 笔记考虑了很多都写下来了,内容详细,相信读者不会白看.一起来更换壁纸吧,让你的电脑显得与众不同. 搭载Windows7系统的电脑一台 设置开机背景图片 设置 ...

  2. 怎么更改锁定计算机背景图片,开关机背景图片如何修改_win7电脑开关机背景图片更改的方法...

    最近有朋友问小编开关机背景图片如何修改的问题,其实对于这个问题,相信还有很多朋友不明白,有时候我们觉得电脑自带的开机关机背景图片不好看,想要更换开关机壁纸.那么怎么更改开机关机背景呢?别着急,今天小编 ...

  3. U盘加背景图片,改图标,修改字体颜色,把文件夹变彩色,更改文件夹背景

    U盘加背景图片,改图标,修改字体颜色,把文件夹变彩色,更改文件夹背景 改图标: 1.首先选择一个你喜欢的图标,图标的扩展名是:ico. 2.将这个图标文件拷到U盘,并在U盘中新建一个文本文档. 3.在 ...

  4. win7更改文件夹背景图片和文件夹背景色

    更改背景图片: W7FBC是一个名为Windows 7 Folder Background Changer的软件,可用于设置文件夹背景图片. 双击运行,第一次会有一个安装过程,屏幕一闪后就完成了.以后 ...

  5. 计算机如何更改用户名的背景,Win10系统下如何更改登录屏幕背景?

    在Win10系统中,有两个屏幕,一个是登录屏幕,另一个是锁定屏幕.这两个屏幕很容易理解. 登录屏幕和锁定屏幕之间的区别 登录屏幕:它还表示登录屏幕.当您第一次重新启动计算机时,您将进入一个具有用户名的 ...

  6. Windows系统图片不显示缩略图如何解决

    Windows系统图片不显示缩略图如何解决 文章目录 Windows系统图片不显示缩略图如何解决 一.问题所在 二.解决问题 三.最后我想说 一.问题所在 最近学习的时候,突然出现了图片不显示缩略略图 ...

  7. php博客系统答辩ppt,基于PHP实现的WEB图片共享系统-php(开题报告+源程序+论文+答辩PPT+文献综述)...

    基于PHP实现的WEB图片共享系统-php(开题报告+源程序+论文+答辩PPT+文献综述) 如有需要请联系 QQ:958035640 摘 要 本系统主要从现代社会电脑化观念出发,通过对现有资料的分析. ...

  8. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结...

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

  9. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结

    篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...

最新文章

  1. BOOST_VMD_ASSERT_IS_SEQ宏相关的测试程序
  2. ELK日志分析平台.1-搭建
  3. PHP系列(十三)PHP会话控制
  4. 堪比“脏牛”!“脏管道” 漏洞可获得Linux 所有主流发行版本的root权限
  5. python 交集_Python设置交集
  6. excel函数手册_一个函数高手的成长之路
  7. 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)...
  8. Ruby On Rails简介
  9. 诸行无常、诸法无我、诸漏皆苦、涅槃寂静
  10. 将数据库连接地址由localhost改为IP地址后无法访问的解决方法
  11. 乐视手机调用自启动管理, 乐视手机调用应用权限管理
  12. java里什么是注释,全面解析Java中的注解与注释
  13. 【易代账】凭证保存的时候提示sql执行错误
  14. 【时光它会替我们记得】- 1024有奖征文
  15. Linux拓展之字段分隔符IFS
  16. java 实例 按CGPA大小排列名字
  17. ThinkPad E531加装固态硬盘全过程
  18. 产业区块链发展周报(10.11—10.16)| 陀螺研究院
  19. 利用pandas模块实现excel多行文本合并
  20. jkd动态代理源码分析

热门文章

  1. 初学者交换两个变量的值的三种方法
  2. 前端进行SHA256withRSA加密及其解密
  3. RTools40的环境配置
  4. 配置多区域的OSPF协议
  5. C语言define定义数组和函数指针
  6. Android8.1_ADB调整安卓旋转屏的方向
  7. Solidity语法大致总结
  8. 食品行业的新科技总结
  9. 聚焦覆铜板缺陷检测,国辰视觉检测系统大显实力
  10. STC15系列 8系列解码红外遥控器(NEC协议)(12mhz)