0

tts に関連してビュー (recyclerview) をスクロールするにはどうすればよいですか?これ

 ArrayList<String> list = new ArrayList<>();

    for (int i = 0; i < SpeakRecyclerGrid.recyclerView.getChildCount(); i++) 
      {
       list.add(((EditText) SpeakRecyclerGrid.recyclerView.getChildAt(i)).getText().toString());
      }

      speakWords(words);

文字列をセクションに分割し、一度に 1 つの文字列を TTS に渡して、ビューを移動することを考えていました。私はすでに、グリッドレイアウトマネージャーに列 (列と呼ばれる) の量の int を与えています。配列リストはすべての単語の後にコンマを追加するので、次のようなことを考えていました

  • n番目/(列)のコンマを見つける
  • 文字列を分割します
  • tts が話しているかどうかを確認し、onUtterance onDone をリッスンして新しい文字列を渡す
  • 文字列を読む
  • ビューを移動する

残りの単語がなくなるまでこれを続け、残りの部分をコーディングします%私はそれをすべて行う方法がわからないので、誰かが気軽に手伝いたい場合は、それらを onUtteranceListener onDone の tts に渡しますが、私はまだアンドロイドには少し慣れていません)、主に誰もがより良い方法を持っていますか?

4

1 に答える 1

0

わかりましたこれは私がこれまでに持っているものですが、おそらくまだアマチュアの作業を使用する可能性があります。画面のサイズに基づいて文字列をブロックに分割しました。画面をスクロールするハンドラーは文字の量に依存しています分割された各文字列、smoothscrolltoposition も非常にゆっくりとスクロールするカスタム レイアウト マネージャーをスクロールしていますが、一部のデバイスでは、単語をカウントする配列リストが 20 にしか到達しないという問題がありますが、理由はわかりませんが、問題が解決したら、うまくいけばこれを更新しますここに私の話す方法と移動方法があります

public void speakAndMove(){

    final ArrayList<String> list = new ArrayList<>();

    SpeakGrid.recyclerView.getLayoutManager().scrollToPosition(0);

    for (int i = 0; i < SpeakRecyclerGrid.recyclerView.getChildCount(); i++) {
        list.add(((EditText) SpeakRecyclerGrid.recyclerView.getChildAt(i)).getText().toString());
    }

    Integer numOfWords = list.size();
    words = list.toString();
    Integer count = 0;
    Integer startPoint = 0;
    scrollPos = 0;
    final Integer speed = words.length() * 15;
    Integer leftOver = 0;
    final int columns = getResources().getInteger(R.integer.grid_columns);
    System.out.println(numOfWords);
    ArrayList<String> arrayList = new ArrayList<>();

    if (list.size() <= columns) {

        if (words.contains("[]")) {
            speakWords("");
        } else if (words.contains(", 's")) {
            formatString = words.replaceFirst(", 's", "'s");
            speakWords(formatString);
        } else if (words.contains(", ing")) {
            formatString = words.replaceFirst(", ing", "ing");
            speakWords(formatString);
        } else {
            speakWords(words);
        }
    }
    if (list.size()>=columns) {

        for (int i = 0; i < words.length(); i++) {

            if (words.charAt(i) == ',') {
                count++;
                if (count == columns) {

                    String ab = words.substring(startPoint, i + 1);
                    //speakWords(ab);
                    if (ab.contains(", 's")) {
                        formatString = ab.replaceFirst(", 's", "'s");
                        speakWords(formatString);
                    } else if (ab.contains(", ing")) {
                        formatString = ab.replaceFirst(", ing", "ing");
                        speakWords(formatString);
                    } else {
                        speakWords(ab);
                    }
                    startPoint = i + 1;
                    count = 0;
                    leftOver = words.length() - startPoint;
                }


                //SpeakGrid.recyclerView.getLayoutManager().scrollToPosition(scrollPos);
                System.out.println("main string"+" scroll " + scrollPos + " startpoint " + startPoint +" speed " + speed);
            }
        }
        if (leftOver > 0) {
            String ab2 = words.substring(startPoint, words.length());
            //speakWords(ab2);
            if (ab2.contains(", 's")) {
                formatString = ab2.replaceFirst(", 's", "'s");
                speakWords(formatString);
            } else if (ab2.contains(", ing")) {
                formatString = ab2.replaceFirst(", ing", "ing");
                speakWords(formatString);
            } else {
                speakWords(ab2);
            }
            //SpeakGrid.recyclerView.getLayoutManager().scrollToPosition(scrollPos);
            System.out.println("leftovers "+ leftOver + " scroll " + scrollPos + " startpoint " + startPoint +" count " + scrollPos);
            count = 0;
            //scrollPos = 0;
        }

    }

    final Handler h = new Handler();
    h.postDelayed(new Runnable() {
        public void run() {
            // This method will be executed once the timer is over
            // Start your app main activity

            scrollPos = scrollPos + columns;
            SpeakGrid.recyclerView.getLayoutManager().smoothScrollToPosition(SpeakGrid.recyclerView, null ,scrollPos);
            System.out.println("position "+ scrollPos + " speed " + speed + " list size " + list.size());
            if (scrollPos < list.size())
                h.postDelayed(this,speed);
            // close this activity
        }
    }, speed);


} 
于 2016-06-11T15:06:08.283 に答える