EditText实现图文混排,保存与解析(墨雪亲测)
1.设计思路:
定义2个按钮,一个插入图片,一个拍照。插入图片时,从系统相册拿到图片,紧接着将拿到的图片重命名保存到指定的手机的文件夹中。然后根据路径和你刚刚设置的文件名从文件夹中获取这张图片放到EditText中,以字符串形式保存到数据库(自动变成路径+文件名),最后要从数据库中拿数据出来,以正则表达式提取路径并替换为图片。拍照也是一样的原理。
2.代码:
onCreate()方法中:
//+_+_+_+_+_+_+_+_+_+_+_+_+_+_+插入图片的按钮事件+_+_+_+_+_+_+_+_+_+_+_+ImageButton btn_insert=(ImageButton)findViewById(R.id.insert_photo);btn_insert.setOnClickListener(new Button.OnClickListener() {//插入@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent getImage = new Intent(Intent.ACTION_GET_CONTENT);getImage.addCategory(Intent.CATEGORY_OPENABLE);getImage.setType("image/*");startActivityForResult(getImage, 0x111);}});ImageButton btn_takePhoto=(ImageButton)findViewById(R.id.take_photo);btn_takePhoto.setOnClickListener(new Button.OnClickListener(){//拍照@Overridepublic void onClick(View arg0) {// TODO 自动生成的方法存根Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 0x222);}});//+_+_+_+_+_+_+_+_+_+_+_+_+_+_+插入图片的按钮事件+_+_+_+_+_+_+_+_+_+_+_+//
onActivityResult()方法中:
//+_+_+_+_+获取图片+_+_+_+_+ContentResolver resolver=getContentResolver();EditText editText=(EditText)findViewById(R.id.content);if(requestCode==0x111&&resultCode==RESULT_OK){//requestCode=0x111是从相册获取。Uri originalUri=data.getData();Bitmap ori_bitmap = null;Bitmap ori_rbitmap = null;try {ori_bitmap=BitmapFactory.decodeStream(resolver.openInputStream(originalUri));ori_rbitmap=resizeimg.resizeImage(ori_bitmap, 300, 300);} catch (FileNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();}String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Log.i("TestFile","SD card is not avaiable/writeable right now."); } String name =Calendar.getInstance(Locale.CHINA).getTimeInMillis() + ".jpg";FileOutputStream FOut = null; File file = new File("/sdcard/myImage/"); file.mkdirs();// 创建文件夹 String fileName = "/sdcard/myImage/"+name; //editText.setText(fileName);try { FOut = new FileOutputStream(fileName); ori_rbitmap.compress(Bitmap.CompressFormat.JPEG, 100, FOut);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); }finally { try { FOut.flush(); FOut.close(); } catch (IOException e) { e.printStackTrace(); } }String myPath=fileName;//接着根据存放的路径获取图片放到EditText中Log.w(myPath,"fileName");Toast.makeText(this, myPath, Toast.LENGTH_SHORT).show();SpannableString span_str = new SpannableString(myPath);Bitmap my_bm=BitmapFactory.decodeFile(myPath);Bitmap my_rbm=resizeimg.resizeImage(my_bm, 300, 300);ImageSpan span = new ImageSpan(this, my_rbm);span_str.setSpan(span, 0, myPath.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Editable et = editText.getText();// 先获取Edittext中的内容int start = editText.getSelectionStart();et.insert(start, span_str);// 设置ss要添加的位置editText.setText((CharSequence)et);// 把et添加到Edittext中editText.setSelection(start + span_str.length());// 设置Edittext中光标在最后面显示}if(requestCode==0x222&&resultCode==RESULT_OK){//requestCode=0x222是拍照String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Log.i("TestFile","SD card is not avaiable/writeable right now."); } String name =Calendar.getInstance(Locale.CHINA).getTimeInMillis() + ".jpg";//给拍的照片命名,下面进行存储Bundle bundle = data.getExtras(); Bitmap camera_bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式Bitmap camera_rbitmap=resizeimg.resizeImage(camera_bitmap, 300, 300);FileOutputStream FOut = null; File file = new File("/sdcard/myImage/"); file.mkdirs();// 创建文件夹 String fileName = "/sdcard/myImage/"+name; try { FOut = new FileOutputStream(fileName); camera_rbitmap.compress(Bitmap.CompressFormat.JPEG, 100, FOut);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); }finally { try { FOut.flush(); FOut.close(); } catch (IOException e) { e.printStackTrace(); } }String myPath=fileName;//下面从文件夹中取出来放到EditText中去SpannableString span_str=new SpannableString(myPath);Bitmap my_bitmap=BitmapFactory.decodeFile(myPath);Bitmap my_rbitmap=resizeimg.resizeImage(my_bitmap, 300, 300);ImageSpan span=new ImageSpan(this,my_rbitmap);span_str.setSpan(span,0,myPath.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Editable et = editText.getText();// 先获取Edittext中的内容int start = editText.getSelectionStart();et.insert(start, span_str);// 设置ss要添加的位置editText.setText((CharSequence)et);// 把et添加到Edittext中editText.setSelection(start + span_str.length());// 设置Edittext中光标在最后面显示}//+_+_+_+_+获取图片+_+_+_+_+//
最后从数据库提取时需要调用一个解析的方法:
//+_+_+_+_+_+_+_+_+_+_+_+_+定义一个解析图片的方法+_+_+_+_+_+_+_+_public CharSequence analyzeImage(String content){String my_content=content;SpannableString span_str=new SpannableString(content);Pattern p=Pattern.compile("chemming/sdcard/myImage/[0-9]{13}+.jpg");Matcher m=p.matcher(content);while(m.find()){String mypath=m.group();Toast.makeText(this, m.group(), Toast.LENGTH_SHORT);Bitmap bitmap=BitmapFactory.decodeFile(mypath);Bitmap rbitmap=resizeimg.resizeImage(bitmap, 300, 300);ImageSpan span=new ImageSpan(this,rbitmap);span_str.setSpan(span, m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return span_str;}//+_+_+_+_+_+_+_+_+_+_+_+_+定义一个解析图片的方法+_+_+_+_+_+_+_+_//
EditText实现图文混排,保存与解析(墨雪亲测)相关推荐
- Android图文混排-实现EditText图文混合插入上传
前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图: 在上图的"会议详情"中,需要支持文本和图片的混合插入,下图演示输入的示例: 当会议创建 ...
- EditText图文混排
下面就具体说一下我遇到的问题,首先是EditText里面的图文混排问题,这个问题的难点就是三点: 1.怎么插图片 2.怎么保存插入的图片和文字 3.怎么解析回图片和文字 解决: 一.怎么插入图片 在这 ...
- android textview 添加图片大小,Android_Android中使用TextView实现图文混排的方法,向TextView或EditText中添加图像比 - phpStudy...
Android中使用TextView实现图文混排的方法 向TextView或EditText中添加图像比直接添加文本复杂一点点,需要用到标签. 只有一个src属性,该属性原则上应该指向一个图像地址或可 ...
- android论文引用图片,Android自动解析html带图片,实现图文混排
在android中,如何将html代码转换为text,然后显示在textview中呢,有一个简单直接的方法: Java textView.setText(Html.fromHtml(content)) ...
- 仿微信表情输入键盘(支持 Gif 表情图文混排 )
作者 | PandaQ404 地址 | http://www.jianshu.com/p/fddca2b0a26b 声明 | 本文是 PandaQ404 原创,已获授权发布,未经原作者允许请勿转载 简 ...
- 【小松教你手游开发】【系统模块开发】图文混排 (在label中插入表情)
本身ngui是自带图文混排的,这个可以在ngui的Example里找到.但是为什么不能用网上已经说得很清楚,比如雨松momo的http://www.xuanyusong.com/archives/29 ...
- 实现小程序的图文混排功能
在小程序的开发过程中,小程序开发人员经常会遇到商品详情中图文混排的功能.这个时候要么考虑用WxParse.wxParse组件去解析.另一种是我们后台巧妙地利用数据结构实现图文混排的功能.后台系统的代码 ...
- iOS - 图文混排技术方案分享
前言 不少同学在工作中都能遇到图文混排的需求.但是实现图文混排的技术方案有好几种,相应的方案优劣也有差别.今天和大家一起分享一下图文混排的技术方案以及我的选择. Demo和解析工具已经开源 GitHu ...
- NGUI-制作位图字体以及图文混排
制作字体过程 首先得下载一个位图制作工具Bitmap font generator,可以点击这里下载 1.新建txt文件,输入字体里面包含的文字 2.保存为utf-8格式:点击文件另存为,选择编码格式 ...
最新文章
- 《JAVA 接口多继承》
- 智能车竞赛技术报告 | 双车接力组 - 东北大学 - 三好学生
- word2007-2010排版中解决段后插入分页符 新页首行空行问题
- 手机拍照功能的简单实现
- vue 点击渲染ajax,vue中在页面加载时发送ajax请求获取数据渲染不到页面上
- php curl 采集文件,curl获取远程文件内容
- tftp的安装、设置以及put、get传输实验
- Less(v3.9.0)使用详解—变量
- 基于深度学习的图像超分论文推荐
- 服务器与操作系统的区别是什么,服务器系统和普通用户操作系统有何区别
- mysql生成 my.cnf_mysql配置文件my.cnf一键生成工具
- 如何快速把多个mp4和m4a混合合并- 无需安装
- 服务降级(服务回退)
- Spark架构原理和生态系统
- 三星 android 自定义物理按键,新机皇驾到!三星Note10将取消物理按键,网友:这造型逼死强迫症...
- xlrd python读取excel 编码错误_python读取excel数据报xlrd.biffh.XLRDError错误原因
- 一个使用Ruby on Rails开发LBS网站的简单实例
- 安装JDK7和Tomcat8.5后,Tomcat服务启动不了
- 如何学习Linux驱动开发?
- 怒怼管理层被标注“永不录用”?腾讯辟谣,应届生回应已找到新工作
热门文章
- Linux查看MegaSAS raid卡缓存策略
- 你知道吗?除了迅雷,这几款下载神器也不错!
- 【近几天电脑经常蓝屏后重启,蓝屏时提供错误代码,本文是解决电脑蓝屏问题的记录,看到最后希望对大家有用。】
- windows远程桌面功能和粘贴拷贝功能
- python樱花树代码_用python绘制樱花树
- mov和mp4格式哪个好_如何快速做视频格式的转换
- 那些年我们踩过的Hive坑
- 正反斜杠的区别_正斜杠(/)和反斜杠(\)的区别
- uni-app打包后ios证书申请和ios应用市场发布(windows主机发布)
- 关于更新windows10 软件乱码