1

在android中可以将agradient引用到textview视为正常动作,

如下 :

 android:background="@drawable/gredient"

和渐变 XML 将如下代码:

<?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
  <gradient android:startColor="#B22222" android:centerColor="#000000"
          android:endColor="#B22222" android:angle="0" /> 
    <corners android:radius="15dp"  /> 
 </shape>

我要问的是在android中有没有将多个渐变应用于由可能段落组成的单个textview,所以每个段落都会有不同的渐变。

任何建议将被认真考虑 ,

谢谢

4

3 回答 3

1

您可能要考虑使用 aWebView而不是TextView(如果您需要更高级的格式),但如果您想坚持使用 TextView,LineBackgroundSpan是您的朋友 :)

尽管可能有一些更好的解决方案(很可能涉及自定义派生类),但这里有一些示例代码,只需实现一个特殊的接口Layout就可以满足您的需求:LineBackgroundSpan

public class MyActivity extends Activity {

    private Editable mEditable;

    private class MySpan implements LineBackgroundSpan {
        private final Rect rect = new Rect();
        private final Drawable drawable;
        private int next = 0;

        public MySpan(Drawable drawable) {
            this.drawable = drawable;
        }

        @Override
        public void drawBackground(Canvas c, Paint p, int left, int right, int top, int baseline,
                int bottom, CharSequence text, int start, int end, int lnum) {
            if (start == end) return;
            if (next == 0) {
                next = mEditable.nextSpanTransition(start, Integer.MAX_VALUE, MySpan.class);
                rect.left = left;
                rect.top = top;
            }
            if (next == end) {
                rect.right = right;
                rect.bottom = bottom;
                c.save();
                drawable.setBounds(rect);
                drawable.draw(c);
                c.restore();
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final Resources res = getResources();
        final Drawable gd1 = res.getDrawable(R.drawable.gd1);
        final Drawable gd2 = res.getDrawable(R.drawable.gd2);
        final Drawable gd3 = res.getDrawable(R.drawable.gd3);
        final Drawable gd4 = res.getDrawable(R.drawable.gd4);

        final TextView tv = new TextView(this);
        setContentView(tv);

        tv.setText("Paragraphs with drawable background:\n", BufferType.EDITABLE);
        mEditable = tv.getEditableText();

        final String text = "paragraph text ";
        appendPara("###\n".replaceAll("#", text), gd1);
        appendPara("##############\n".replaceAll("#", text), gd2);
        appendPara("#######\n".replaceAll("#", text), gd3);
        appendPara("###########\n".replaceAll("#", text), gd4);
    }

    private void appendPara(String string, Drawable gd) {
        final int start = mEditable.length();
        mEditable.append(string);
        final int end = mEditable.length();
        mEditable.setSpan(new MySpan(gd), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

}
于 2012-07-08T17:37:51.263 回答
0

我认为 android 的默认 TextView 是不可能的。

您可以通过扩展您的类来创建自己的视图,View并使用视图方法中的Canvas.drawText(...)和等方法来创建具有不同渐变的每个段落。Canvas.drawBitmap(...)onDraw()

这也可以帮助您控制行高和段落间距。

于 2012-06-26T17:22:15.780 回答
0

因为,您需要多个渐变来为您的多个渐变,Paragraphs那么为什么不使用TextView每个Paragraph渐变并为每个渐变设置唯一的渐变TextView

如果你不知道你会有多少段,

您必须创建一个LinearLayoutwho heightis wrap-contentand 在运行时为每个段落创建一个TextViewwith fill_parent widthandwrap_context height并将其添加TextView到您的父 ( LinearLayout) 视图。并在代码中设置backgrounds为您的TextViews.

于 2012-07-08T07:27:47.917 回答