有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

与tts 安卓相关的java滚动视图

如何滚动与tts相关的视图(recyclerview), 我看过onUtterance,但它似乎只有一个启动和停止侦听器,所以我需要跳出框框思考,我给我的tts一个来自这样一个数组列表的字符串

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

我正在考虑将字符串切割成多个部分,然后一次给TTS一个字符串,并在移动视图的同时移动它。我已经为gridlayout管理器提供了一个列数(称为列)的int。 数组列表在每个单词后面加一个逗号,所以我想

  • 查找第n/(列)个逗号
  • 拆线
  • 检查tts是否正在讲话,并聆听ONTONE的声音以传递新字符串
  • 读字符串
  • 移动视图

继续这样做,直到剩下的字都没有了,剩下的部分也没有了编码%I我不知道怎么做,所以如果有人想帮你感觉自由的话,(我想我正在看StringUtils,用for循环创建每个较小的字符串,并将它们传递到OnPatternanceListener OnOne中的tts,但我对安卓还是有点陌生),但主要是谁有更好的方法


共 (1) 个答案

  1. # 1 楼答案

    好的,这是我目前为止所做的,但它可能需要一些工作,我仍然是一个业余爱好者,我已经根据屏幕大小将字符串分割成块,滚动屏幕的处理程序依赖于每个分割字符串中的字母数量,此外,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);
    
    
    }