实现在edittext中任意插入图片
Myedittext:
public class MyEditText extends EditText {
public MyEditText(Context context) {
super(context);
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void insertDrawable(int id) {
final SpannableString ss = new SpannableString("easy");
//得到drawable对象,即所有插入的图片
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
//用这个drawable对象代替字符串easy
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
//包括0但是不包括"easy".length()即:4。[0,4)
ss.setSpan(span, 0, "easy".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
append(ss);
}
}
MyActivity:
public class MyActivity extends Activity {
/** Called when the activity is first created. */
Button b;
MyEditText e;
private static final int PHOTO_SUCCESS = 1;
private static final int CAMERA_SUCCESS = 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shangczp);
b = (Button) findViewById(R.id.myButton);
e = (MyEditText) findViewById(R.id.myEdit);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
final CharSequence[] items = { "手机相册", "相机拍摄" };
AlertDialog dlg = new AlertDialog.Builder(MyActivity.this).setTitle("选择图片").setItems(items,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int item) {
//这里item是根据选择的方式,
//在items数组里面定义了两种方式, 拍照的下标为1所以就调用拍照方法
if(item==1){
Intent getImageByCamera= new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(getImageByCamera, CAMERA_SUCCESS);
}else{
Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
getImage.addCategory(Intent.CATEGORY_OPENABLE);
getImage.setType("image/*");
startActivityForResult(getImage, PHOTO_SUCCESS);
}
}
}).create();
dlg.show();
// e.insertDrawable(R.drawable.easy);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
ContentResolver resolver = getContentResolver();
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PHOTO_SUCCESS:
//获得图片的uri
Uri originalUri = intent.getData();
Bitmap bitmap = null;
try {
Bitmap originalBitmap = BitmapFactory.decodeStream(resolver.openInputStream(originalUri));
bitmap = resizeImage(originalBitmap, 200, 200);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if(bitmap != null){
//根据Bitmap对象创建ImageSpan对象
ImageSpan imageSpan = new ImageSpan(MyActivity.this, bitmap);
//创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
SpannableString spannableString = new SpannableString("[local]"+1+"[/local]");
// 用ImageSpan对象替换face
spannableString.setSpan(imageSpan, 0, "[local]1[local]".length()+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//将选择的图片追加到EditText中光标所在位置
int index = e.getSelectionStart(); //获取光标所在位置
Editable edit_text = e.getEditableText();
if(index <0 || index >= edit_text.length()){
edit_text.append(spannableString);
}else{
edit_text.insert(index, spannableString);
}
}else{
Toast.makeText(MyActivity.this, "获取图片失败", Toast.LENGTH_SHORT).show();
}
break;
case CAMERA_SUCCESS:
Bundle extras = intent.getExtras();
Bitmap originalBitmap1 = (Bitmap) extras.get("data");
if(originalBitmap1 != null){
bitmap = resizeImage(originalBitmap1, 200, 200);
//根据Bitmap对象创建ImageSpan对象
ImageSpan imageSpan = new ImageSpan(MyActivity.this, bitmap);
//创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
SpannableString spannableString = new SpannableString("[local]"+1+"[/local]");
// 用ImageSpan对象替换face
spannableString.setSpan(imageSpan, 0, "[local]1[local]".length()+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//将选择的图片追加到EditText中光标所在位置
int index = e.getSelectionStart(); //获取光标所在位置
Editable edit_text = e.getEditableText();
if(index <0 || index >= edit_text.length()){
edit_text.append(spannableString);
}else{
edit_text.insert(index, spannableString);
}
}else{
Toast.makeText(MyActivity.this, "获取图片失败", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
}
/**
* 图片缩放
* @param originalBitmap 原始的Bitmap
* @param newWidth 自定义宽度
* @return 缩放后的Bitmap
*/
private Bitmap resizeImage(Bitmap originalBitmap, int newWidth, int newHeight){
int width = originalBitmap.getWidth();
int height = originalBitmap.getHeight();
//定义欲转换成的宽、高
// int newWidth = 200;
// int newHeight = 200;
//计算宽、高缩放率
float scanleWidth = (float)newWidth/width;
float scanleHeight = (float)newHeight/height;
//创建操作图片用的matrix对象 Matrix
Matrix matrix = new Matrix();
// 缩放图片动作
matrix.postScale(scanleWidth,scanleHeight);
//旋转图片 动作
//matrix.postRotate(45);
// 创建新的图片Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(originalBitmap,0,0,width,height,matrix,true);
return resizedBitmap;
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <com.example.edittext_pic.MyEditText
android:id="@+id/myEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content" /> <Button
android:id="@+id/myButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="插入图片" /> </LinearLayout>
实现在edittext中任意插入图片的更多相关文章
- EXCLE中快速插入图片
在excle中怎么快速插入图片呢,一张一张点实在比较麻烦 解决办法: <table><img src="D:\A.png" width="60" ...
- android 在EditText中显示表情图片
public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { su ...
- 【Tips】有道云笔记中Markdown插入图片
在有道云笔记中用MarkDown插入图片 新建一个文档专门用来放图片 把所有要用的图片专门放在一个笔记里,用普通模式先同步笔记,然后用分享笔记 会有一个链接,用浏览器打开这个分享的笔记就能找到所有的图 ...
- 用Java实现在123456789中随机插入+或者-,使表达式的结果为100
这里我的思路是暴力算法.就是不断试错,不限循环次数,直到找到正确的情况为止. 通过走随机,不断控制在123456789中添加+或者-,再通过正则表达式筛选出所有的数字(包含正负),转换为Integer ...
- angularjs中ng-repeat插入图片
<tr ng-repeat="item in datas" ng-module="datas"> <td> <img class ...
- Android图文混排-实现EditText图文混合插入上传
前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图: 在上图的"会议详情"中.须要支持文本和图片的混合插入,下图演示输入的演示样例: 当会议 ...
- C#中按模板操作Word —— 如何向Word中插入图片
一.Word对象模型的重叠性分析 本文主要介绍通过书签Bookmark向Word文档中插入图片的方法.在此之前我们先简单讨论下Word对象模型的重叠性.如果你对Word对象模型还不熟悉,请参考本专栏第 ...
- Office PPT中如何插入flash
1 在"视图"选项中找到工具栏,控件工具箱,最后一个其他工具中的shockwave flash object 2 当鼠标变成十字架之后随便画一个矩形,然后会出现一个白色的矩形中间十 ...
- Android 插入图片到媒体库
今天介绍一下在Android中怎么插入图片到媒体库,下面看代码: final String titleName = Function.md5(imageUri.toLowerCase()) + &qu ...
随机推荐
- vxer
Virus Maker 或者 Virus eXchanger 的简称,(有时候中文也叫做毒客),是一群追求完美.极致代码的病毒程序员. 1.VXer简介: VXer热爱汇编,熟悉各种处理器架构,致力于 ...
- 记一个使用Client Object Model上传文件的小例子
1. 新建一个C#的Console project. 2. 给project 添加reference: Microsoft.SharePoint.Client Microsoft.SharePoint ...
- powerdesigner 16.5 破解步骤
假设你的PowerDesigner已经安装完成.(PowerDesigner下载地址:http://pan.baidu.com/s/1mgqjmpa) 1. 从网上下载PowerDesigner165 ...
- 架构设计:系统间通信(20)——MQ:消息协议(下)
(接上文<架构设计:系统间通信(19)--MQ:消息协议(上)>) 上篇文章中我们重点讨论了"协议"的重要性.并为各位读者介绍了Stomp协议和XMPP协议. 这两种协 ...
- [笔记][Java7并发编程实战手冊]3.8 并发任务间的数据交换Exchanger
[笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 Exchanger 是一个同步辅助类.用于两个并发线程之间在一个同步点进行数据交换. 同意两个线程在某一个点进行数据交换. 本章exchan ...
- oracle中database links的使用
1.在pl/sql developer中创建database links 2.使用database links select * from table1@xtbg 注意:@xtbg是database ...
- SQL语法 之 表连接
一.连接条件 连接查询中用来连接连个表的条件称为连接条件或连接谓词.其形式为: [<表1>].<列名1> <连接运算符> [<表2>].<列2&g ...
- IIS 之 功能详解
IIS (Internet Information Services)信息服务管理器,本文以Windows10环境下的IIS为例,主要包含:FTP 服务器.Web 管理工具.万维网服务三大部分,如下表 ...
- 【LeetCode】117. Populating Next Right Pointers in Each Node II (2 solutions)
Populating Next Right Pointers in Each Node II Follow up for problem "Populating Next Right Poi ...
- Weex Ui 是一个基于 Weex 的富交互、轻量级、高性能的移动端 UI 组件库
Github资源:https://github.com/alibaba/weex-ui 预览 你可以通过飞猪.淘宝.天猫.Weex Playground 或者浏览器扫码体验 安装 npm i weex ...