将agradient引用为textview,可以在android中实现正常动作,
如下:
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>
我想问的是什么是否有机会以将多个渐变应用于单个textview 组成的可能段落,因此每个段落都会有不同的渐变。
任何建议都将受到赞赏,
感谢
答案 0 :(得分:1)
您可能需要考虑使用WebView
代替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);
}
}
答案 1 :(得分:0)
我不认为使用android的默认TextView是可能的。
您可以通过使用View
扩展课程来创建自己的视图,并在视图的Canvas.drawText(...)
方法中使用Canvas.drawBitmap(...)
和onDraw()
等方法来创建每个段落用不同的渐变。
这也可以帮助您控制行高和段落间距。
答案 2 :(得分:0)
因为,您的多个Paragraphs
需要多个渐变,那么为什么不为每个TextView
设置一个Paragraph
并为每个TextView
设置唯一渐变。
如果你不知道你会有多少段,
您必须创建LinearLayout
为height
为wrap-content
的{{1}},并在每个段落的运行时创建TextView
fill_parent width
和wrap_context height
并将TextView
添加到您的父(LinearLayout
)视图中。并在代码集backgrounds
中添加到TextViews
。