Я разрабатываю интерактивную детскую книгу. Я использую холст для просмотра поверхности, так как мне нужна анимация, которая, по моему мнению, лучше всего подходит для просмотра поверхности.
Я хочу сделать каждое слово осязаемым и прочитать это слово вслух. Это отлично работало, когда я использовал обычное представление с текстовым представлением внутри. Затем я попробовал холст для анимации и не знаю, как это сделать.
Я использовал статический макет на холсте для хранения растягиваемого текста. Я не знаю, как я могу активировать 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(new LinkTouchMovementMethod()) без текстового просмотра.
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();
}
Я хочу либо добавить текстовое представление в staticlayout, либо добавить spannableString и активировать слушателей.
staticlayout
? - person user924   schedule 27.10.2017