更改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缓存到本地中,以便下次访问网站时使用.这样做不仅减少了服务器的压力,并且也减少了用户的 ...
随机推荐
- Linux进程同步之记录锁(fcntl)
记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作.尽管读写锁也可以通过在共享内存区来进行进程的同步,但是fcntl记 ...
- BZOJ 1269 文本编辑器 Splay
题目大意:维护一个文本编辑器,支持下列操作: 1.将光标移动到某一位置 2.在光标后插入一段字符串 3.删除光标后的一段字符 4.翻转光标后的一段字符 5.输出光标后的一个字符 6.光标-- 7.光标 ...
- C#中使用gRPC
C#中使用gRPC 我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目 ...
- Bulk Insert Data
Bulk Insert Data 命名空间:Oracle.DataAccess.Client 组件:Oracle.DataAccess.dll(2.112.1.0) ODP.NET 版本:ODP.NE ...
- 转载:ecshop自定义销量
转自:http://www.phpally.com/ecshop%E8%87%AA%E5%AE%9A%E4%B9%89%E9%94%80%E9%87%8F/ 本补丁以假乱真,对网站销售有一定帮助,计算 ...
- Eclipse SVN 安装注意事项
1. 下载SVN 插件 打开 Eclipse , 菜单条 Help -> Install New Software 在 Work with 这里加入网址 : http://subclipse ...
- 强大的数据库查询工具Database.NET 9.4.5018.42
原文:强大的数据库查询工具Database.NET 9.4.5018.42 强大的数据库查询工具Database.NET 9.4.5018.42 两个工具的下载地址,两个软件都是绿色免安装的,直接双击 ...
- 【Android进阶】在开发中Application到底用来做什么
首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们 ...
- leetcode dfs Validate Binary Search Tree
Validate Binary Search Tree Total Accepted: 23828 Total Submissions: 91943My Submissions Given a bin ...
- LoadRunner获取一个独特的价值在执行的场景
/* * * 笔者:古柏涛 * 迄今:2015-2-26 * E-mail:gubotao@foxmail.com * * 内容概要: * 本代码产生一个从1970年1月1日0时開始累计以毫秒为单位的 ...