|
|
/*
|
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
|
*
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
* You may obtain a copy of the License at
|
|
|
*
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
*
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
* See the License for the specific language governing permissions and
|
|
|
* limitations under the License.
|
|
|
*/
|
|
|
|
|
|
package net.micode.notes.tool;
|
|
|
|
|
|
import android.content.Context;
|
|
|
import android.graphics.Bitmap;
|
|
|
import android.graphics.drawable.Drawable;
|
|
|
import android.net.Uri;
|
|
|
import android.text.Spannable;
|
|
|
import android.text.SpannableStringBuilder;
|
|
|
import android.text.style.ImageSpan;
|
|
|
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONException;
|
|
|
import org.json.JSONObject;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 图片Span工具类,用于处理图片在Spannable中的序列化和反序列化
|
|
|
*/
|
|
|
public class ImageSpanUtils {
|
|
|
|
|
|
/**
|
|
|
* 将Spannable中的图片信息序列化为JSON字符串
|
|
|
*
|
|
|
* @param spannable 包含图片信息的Spannable对象
|
|
|
* @param content 原始文本内容
|
|
|
* @return 图片信息的JSON字符串表示
|
|
|
*/
|
|
|
public static String serializeImageInfo(Spannable spannable, String content) {
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
|
|
|
// 获取所有图片Span
|
|
|
ImageSpan[] imageSpans = spannable.getSpans(0, spannable.length(), ImageSpan.class);
|
|
|
|
|
|
for (ImageSpan span : imageSpans) {
|
|
|
JSONObject spanObj = new JSONObject();
|
|
|
try {
|
|
|
int start = spannable.getSpanStart(span);
|
|
|
int end = spannable.getSpanEnd(span);
|
|
|
|
|
|
// 获取图片URI(如果有的话)
|
|
|
Drawable drawable = span.getDrawable();
|
|
|
if (drawable != null) {
|
|
|
// 这里我们假设图片信息已经在其他地方存储,只需记录位置和路径
|
|
|
// 在实际实现中,你可能需要将图片保存到特定位置并记录路径
|
|
|
spanObj.put("type", "image");
|
|
|
spanObj.put("start", start);
|
|
|
spanObj.put("end", end);
|
|
|
// 注意:ImageSpan通常不直接存储URI,需要额外的机制来跟踪图片路径
|
|
|
// 这里仅为示例,实际实现需要根据具体情况调整
|
|
|
}
|
|
|
} catch (JSONException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return jsonArray.toString();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 将JSON格式的图片信息反序列化并应用到文本上
|
|
|
*
|
|
|
* @param context 上下文
|
|
|
* @param text 原始文本
|
|
|
* @param imageJson 序列化的图片信息JSON字符串
|
|
|
* @return 包含图片信息的SpannableStringBuilder
|
|
|
*/
|
|
|
public static SpannableStringBuilder deserializeImageInfo(Context context, String text, String imageJson) {
|
|
|
SpannableStringBuilder spannable = new SpannableStringBuilder(text);
|
|
|
|
|
|
if (imageJson == null || imageJson.isEmpty()) {
|
|
|
return spannable;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
// 这里需要根据实际的图片存储机制来实现
|
|
|
// 因为图片通常需要特殊处理,这里暂时返回原始文本
|
|
|
// 实际实现需要考虑如何存储和检索图片
|
|
|
return spannable;
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
return spannable;
|
|
|
}
|
|
|
} |