更改Calendar背景图(使用系统映像选择器)
最近提出的申请,主接口是一个历,网上有很多第三方的日历控件,有使用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 line
int 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的背景:
<CalendarView
android: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);
然后你能够弄一个button或者其他的什么,绑定上它的事件,来触发我们切换到pic选择-->
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 0);
这种方法选择完,会回调这种方法,所以你要重写这个-->
@Override
protected 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 BGSP
BGSP 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背景图(使用系统映像选择器)的更多相关文章
- Linux操作系统之更改启动菜单的背景图实战案例
Linux操作系统之更改启动菜单的背景图实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.制作图像并上传到服务器 1>.使用window 10操作系统自带的画图工具 ...
- vue项目中,无需打包而动态更改背景图以及标题
1.背景 今天,项目经理对已完成的项目提出了一个需求,即项目的基础功能目前针对于各个基层法院都适用,而对于不同的法院,我们每次都需要前端研发来更改所属法院的法院名称以及背景图,这样对于演示者来说是非常 ...
- 在Excel表里面插入背景图
工作中我们会经常用到MS Excel,通常我们打开MS Excel,里面的工作表都是空白单调的背景.当然了,MS Excel可以在工作簿里面插入背景图片.那么问题来了,如果你没有安装Microsoft ...
- 为Visual Studio更换皮肤和背景图
最近在博客上别人在老早之前就有加了背景图,想想怎么能这么out,于是乎,百度一下,能否知道? 咳咳,资源还是有滴!可惜都是比较旧的跟新版本的配置方法可能有点不一样, 可能会有很多人会觉得不适应,不过没 ...
- [Unity3D插件]2dtoolkit系列二 动画精灵的创建以及背景图的无限滚动
经过昨天2dtoolkit系列教程一的推出,感觉对新手还有有一定的启发作用,引导学习使用unity 2dToolKit插件的使用过程,今天继续系列二——动画精灵的创建,以及背景图的无限循环滚动,在群里 ...
- 如何让窗口控件半透明(控件在Paint自己时,首先向主窗口询问,获取主窗口上控件所在区域的背景图)
在网上关于窗口视觉效果,有2个问题被问得最多:第一个是如何让窗口边框有阴影效果?第二个是如何让窗口控件有半透明效果? 对于第一个问题,我们的答案是用双层窗口模拟或是用Layered Window.在X ...
- 给Visual Studio更替皮肤和背景图
给Visual Studio更换皮肤和背景图 1.先安装更换皮肤的插件 VS菜单栏里面找到:工具>扩展和更新>联机>搜索: Theme Editor 下载并安装: 安装后先不着 ...
- QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)
QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...
- 清除css、javascript及背景图在浏览器中的缓存
在实际项目开发过过程中,页面是上传到服务器上的.而为了减少服务器的压力,让用户少加载,浏览器会将图片.css.js缓存到本地中,以便下次访问网站时使用.这样做不仅减少了服务器的压力,并且也减少了用户的 ...
随机推荐
- HashMap-死锁导致cpu占用100%分析(转)
最近项目里面的一段千年代码出了问题,这个问题以前也出现过,不过不是那么明显,这次迁移机器由以前的4台机子变成2台以后问题被放大,最终不得不解决,特此分析一下. 先放出问题的代码 ? 1 2 3 4 5 ...
- 十年linux命令总结
十年linux命令总结 本文链接: http://codingstandards.iteye.com/blog/786653 关于命令类型划分 本表中列出了我穷尽了我所有的记忆整理出来的Linux命令 ...
- mysql用户权限分配及主从同步复制
赋予wgdp用户查询权限: grant select on wg_dp.* to 'wgdp'@'%' IDENTIFIED BY 'weigou123'; grant all privileges ...
- Quartz时间配置
格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-5 ...
- Xamarin for android:为button设置click事件的几种方法
原文:Xamarin for android:为button设置click事件的几种方法 在Xamarin中一个最基础的事情,就是为一个button指定click事件处理方法,可是即使是这么一件事也有 ...
- 使用SharePoint管理中心管理服务
使用SharePoint管理中心管理服务 为了管理服务应用程序.场管理员要么使用管理中心,要么使用PowerShell. 管理服务应用程序页面列出了场上执行的服务.你能够管理他们. 很多服务都有自己的 ...
- 《HBase权威指南》读书笔记----简介
工作中要使用HBase,刚刚开始接触HBase,理解不深,只是记录一下 . HBase基于google的bigtable论文实现,属于nosql. 几个概念: (1)列(column):最基本单位为列 ...
- NYOJ710 外星人的供给站 【贪心】
外星人的供给站 时间限制:1000 ms | 内存限制:65535 KB 难度: 描写叙述 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们眼下对生命基 ...
- Swift基础--使用TableViewController自己定义列表
首先建立一个swift项目,把storyboard的内容删掉,加入一个Navigation Controller.然后设置storyboard相应界面的class,在Navigation Contro ...
- Gradle学习系列之一——Gradle快速入门(转)
这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构 ...