Android 图文混排
来源:互联网 发布:北京 软件编程培训班 编辑:程序博客网 时间:2024/05/16 06:45
先上代码:
public class ITBox extends RelativeLayout{private String TAG="ITBox";//调用系统相册-选择图片public static final int IMAGE = 1;private Context mContext;private EditText etInput;private AppendImageTask task;private String mResultOutPut="";private List<String>mResultImages=new ArrayList<>();public ITBox(Context context) { this(context,null);}public ITBox(Context context, AttributeSet attrs) { this(context, attrs,0);}public ITBox(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mContext=context; View view= LayoutInflater.from(context).inflate(R.layout.input_box,this); etInput=view.findViewById(R.id.et_input);}public String getResultString(){ return getImages(etInput.getText().toString());}public void printText(){ Log.i(TAG,"content------>"+etInput.getText().toString());}public List<String>getResultImages(){ mResultImages.clear(); String pattern="(/.*?\\.jpg)"; Pattern r = Pattern.compile(pattern); Matcher matcher= r.matcher(etInput.getText().toString()); while( matcher.find() ) { // line= line.replace(matcher.group(),"[image".concat(String.valueOf(count)).concat("]")); // System.out.println( "匹配项" + count+":" + matcher.group() ); //group方法返回由以前匹配操作所匹配的输入子序列。 mResultImages.add(matcher.group()); } return mResultImages;}@Overridepublic void setOnLongClickListener(OnLongClickListener l) { etInput.setOnLongClickListener(l);}public void addImage(String localPath){ task= new AppendImageTask(); task.execute(localPath);} class AppendImageTask extends AsyncTask<String,Integer,SpannableString> { @Override protected SpannableString doInBackground(String... params) { try { // 用imgUrl获取Bitmap对象 SpannableString spb=appendImage(params[0]); mResultImages.add(params[0]); return spb; }catch (ExecutionException e){ e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(SpannableString sp) { super.onPostExecute(sp); Editable edit = etInput.getEditableText(); // 获取光标位置 int index = etInput.getSelectionStart(); // 光标所在位置插入文字 edit.insert(index, sp); Log.i("图文混排",etInput.getText().toString()); } private SpannableString appendImage(String imgUrl) throws ExecutionException, InterruptedException { // 用imgUrl获取Bitmap对象 Bitmap bitmap = Glide.with(mContext.getApplicationContext()) .load(imgUrl) .asBitmap() //必须 .centerCrop() .into(500, 500) .get(); // 将Bitmap对象转换成Drawable对象 Resources res =mContext.getResources(); Drawable drawable = new BitmapDrawable(res, bitmap); // 用imgUrl初始化SpannableString对象 SpannableString msp = new SpannableString(imgUrl); // 设置图片宽高 drawable.setBounds(0, 0, 600, 800); msp.setSpan(new ImageSpan(drawable), 0, imgUrl.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 获取Editable的对象 return msp; }}private String getImages(String line){ String pattern="(/.*?\\.jpg)"; Pattern r = Pattern.compile(pattern); Matcher mactcher= r.matcher(line); int count=0; while( mactcher.find() ) { line= line.replace(mactcher.group(),"[image".concat(String.valueOf(count)).concat("]")); count++; } return line;} }
appendImage 函数会把图片转化成 SpannableString对象,这样Editable可以插入对象了
注意:
1.输入框中获取的内容是包含地址用了[image0][image1]…..的内容替换了图片,同时混排的图片地址在mResultImages中,整个输入框的内容是mResultOutPut
2.替换的图片用的正则匹配的是 String pattern=”(/.*?\.jpg)”,匹配的内容是”/……. .jpg” 在实际使用是需要修改的 。
阅读全文
0 0
- android图文混排
- Android图文混排
- Android 图文混排
- android图文混排
- Android图文混排
- Android图文混排
- Android 图文混排
- android图文混排
- Android ListView - 图文混排
- android 显示图文混排
- android TextView图文混排
- android TextView图文混排
- Android Button1.图文混排
- [Android]listview图文混排
- android edittext图文混排
- Android/Html图文混排
- Android图文混排
- android 图文混排 显示 与 图文混排输入
- 从nginx-rtmp中提取一帧h264帧
- 字符串求数字长度
- GYM 100488 Toy Soldiers
- 日期转换
- 【转】并查集算法和路径压缩
- Android 图文混排
- MFC静态文本框重绘
- 单例模式和类加载的实际案例分析(java)
- linux设备驱动之ioctl控制
- Android 自定义PopupWindow7.0上的显示
- 用ffmpeg如何将一帧h264转成jpg
- webservice中使用socket
- Server.MapPath()
- 论文阅读理解