如何获取imageSpan实例的路径

时间:2018-07-15 15:32:05

标签: java android imagespan

我在spannableString中添加了一个clicklistener,当我单击它时我想获取imageSpan的本地路径,以便可以将该路径传递给新活动以显示原始图像。   我使用过imageSpan的方法 getSource(),但是该方法只是向我返回null。我找不到解决方法。我需要帮助! < / p>

noteContent.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Spanned s = noteContent.getText();//得到Spanned对象

            ImageSpan[] image_spans = s.getSpans(0, s.length(), ImageSpan.class); //得到该EditText中多有的ImageSpan对象

            int selectStart = noteContent.getSelectionStart(); //获得当前EditText中的光标位置
            Log.i("info", "cursor: " + selectStart);
            int i = 0;
            //遍历所有的ImageSpan 根据光标位置判断点击的是哪一个ImageSpan
            for (ImageSpan span : image_spans) {
                int start = s.getSpanStart(span);
                int end = s.getSpanEnd(span);
                String path = span.getSource();
                Log.i("info", "start:" + start + ",end:" + end + ",image path:" + path + ",times" + i);
                if (selectStart >= start && selectStart <= end) {
                    //Toast.makeText(getApplicationContext(), "点击了图片", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(NoteActivity.this,PictureDisplayer.class);
                    intent.putExtra("PATH",path);
                    i += 1;
                    startActivity(intent);
                }
            }
            Log.i("info", "times:" + i);
        }
    });

imageSpan被添加到如下所示的spand中,insertBitmap是公共的,它获得一个具有前一个活动传递的路径的位图,并调用私有的insertBitmap,私有的insertBitmap生成imageSpan并将其插入spannableString

private SpannableString insertBitmap(String path, Bitmap bitmap) {
    Editable edit_text = getEditableText();
    int index = getSelectionStart(); // get the location of the cursor
    //插入换行符,使图片单独占一行
    SpannableString newLine = new SpannableString("\n");
    edit_text.insert(index, newLine);//插入图片前换行
    // 创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
    path = mBitmapTag + path + mBitmapTag;
    SpannableString spannableString = new SpannableString(path);
    // 根据Bitmap对象创建ImageSpan对象
    ImageSpan imageSpan = new ImageSpan(mContext, bitmap);
    // 用ImageSpan对象替换你指定的字符串
    spannableString.setSpan(imageSpan, 0, path.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    // 将选择的图片追加到EditText中光标所在位置
    if (index < 0 || index >= edit_text.length()) {
        edit_text.append(spannableString);
    } else {
        edit_text.insert(index, spannableString);
    }
    edit_text.insert(index, newLine);//插入图片后换行
    return spannableString;
}


/**
 * 插入图片
 *
 * @param path
 */
public void insertBitmap(String path) {
    Bitmap bitmap = getSmallBitmap(path, 480, 800);
    insertBitmap(path, bitmap);
}

0 个答案:

没有答案