更改Calendar的背景图片(使用系统图片选择器)
来源:互联网 发布:mac mini好吗 编辑:程序博客网 时间:2024/04/27 17:36
最近在做一个应用,主界面是一个日历,网上有很多第三方的日历控件,有使用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);
然后你可以弄一个按钮或者其它的什么,绑定上它的事件,来触发我们切换到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...)
1 0
- 更改Calendar的背景图片(使用系统图片选择器)
- 更改SAP的背景图片
- 更改NavigationController的背景图片
- Calendar日历选择器的使用方法
- 更改Ubuntu 的登录背景图片
- ListView 的Item更改背景图片
- 更改windows系统鼠标图片的解决办法
- iOS 系统图片选择器
- Android 调用系统相机进行拍照 使用自带的图片选择器和裁剪工具
- IOS更改系统自带的返回按钮标题和背景图片
- 仿微信图片选择器的添加使用
- CSS3新增选择器与背景图片的设置
- 判断控件图片或背景图片是否被更改
- 背景图片、按钮图片的添加
- 关于图片之下的背景图片
- 背景图片的使用
- Calendar 的使用
- Calendar控件的使用
- 数据结构--十字链表(相加,创建)
- WAP/HTML5 手机拨号链接&发送短信
- 数据结构--广义表
- Android软件开发之ListView 详解
- 2014-2015学年大三上半学期总结,下学期展望
- 更改Calendar的背景图片(使用系统图片选择器)
- 数据结构--二叉树(线索链表)
- STL-------map与multimap
- 关于My97datePicker时间控件
- easyUI重绘combobox中下拉箭头
- 几个主流的Java连接池
- 数据结构--二叉树
- 苹果自带地图包括路线规划
- oracle解锁表语句