我設計了一個互動的孩子書。我在surfaceview上使用了一個畫布,因爲我需要的動畫我認爲最適合於surfaceview如何在staticlayout和surfaceview中包含可點擊文本
我想讓每個單詞都可以觸摸並朗讀這個單詞。當我在裏面使用帶有textview的常規視圖時,這很好用。然後,我嘗試了動畫的畫布,但不知道如何去做。
我在畫布上使用了一個靜態佈局來保存可跨越文本。我不知道如何激活onTouchListener。
這裏我設置了staticlayout
public class OurView extends SurfaceView implements Runnable, Callback {
public OurView(Context context, AttributeSet attribs) {
super(context, attribs);
init(context);
}
private void init(Context context) {
ball = BitmapFactory.decodeResource(getResources(), R.drawable.ball);
text = context.getString(R.string.para1);
tpaint = new TextPaint();
tpaint.setColor(Color.WHITE);
tpaint.setStyle(Style.FILL);
tpaint.setTextSize(40F);
TextView tv = splitWords(text);
staticLayout = new StaticLayout(??????????, tpaint, 1000F,
Layout.Alignment.ALIGN_NORMAL, 1, 0, false);
holder = getHolder();
holder.addCallback(this);
}
這是我的分裂文成的話並作出觸摸聽者的每一個字。它目前返回一個Textview,我試圖返回spaanablestring,但我無法激活偵聽器。我想改變它以適應我的需求。 我不知道如何做tv.setMovementMethod(新的LinkTouchMovementMethod())沒有textview。
public TextView splitWords(final String text) {
TextView tv = new TextView(getContext());
final SpannableString ssText = new SpannableString(text);
Pattern pattern;
String regex = "\\w+";
pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
final int begin = matcher.start();
final int end = matcher.end();
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
String word = (String) text.subSequence(begin, end)
.toString();
Toast.makeText(getContext(), word, Toast.LENGTH_SHORT)
.show();
return;
}
};
ssText.setSpan(clickableSpan, begin, end, 0);
}
tv.setMovementMethod(new LinkMovementMethod());
tv.setText(text, BufferType.SPANNABLE);
return tv;
}
出於完整性我DoDraw
private void doDraw(Canvas canvas) {
canvas.drawBitmap(ball, x, 100, null);
incrementX();
canvas.save();
canvas.translate(100.0f, 350.0f);
staticLayout.draw(canvas);
canvas.restore();
}
我想要麼添加一個TextView到staticlayout或添加spannableString並激活聽衆。
你用'staticlayout'解決了嗎? – user924 2017-10-27 19:38:20