gpt4 book ai didi

java - 单个 Textview 的多个渐变

转载 作者:行者123 更新时间:2023-11-30 04:08:36 25 4
gpt4 key购买 nike

将渐变引用到textview视为在android中可以实现正常 Action ,

如下:

 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由多个段落组成,所以每个段落都会有不同的渐变。

任何建议将不胜感激,

谢谢

最佳答案

您可能想考虑使用 WebView 而不是 TextView(如果您需要更高级的格式设置),但如果您想坚持使用 TextView,LineBackgroundSpan是你的 friend :)

虽然可能有一些更好的解决方案(很可能涉及自定义 Layout 派生类),但这里有一些示例代码,只需实现一个特殊的 LineBackgroundSpan 接口(interface)即可完成您想要的操作:

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);
}

}

关于java - 单个 Textview 的多个渐变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11212587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com