Android TextView редактирование Marquee speed

Есть ли возможность переопределить в TextView, внутренний объект private static final class Marquee? Если быть точнее, то мне нужно изменить параметр MARQUEE_DP_PER_SECOND или конечный вариант, поле mPixelsPerSecond или mPixelsPerMs.

Я пробовал написать свою реализацию Marquee или использовать библиотеки, но итоговое поведение несоответствовало оригинальному.

Самый подходящим вариантом были:

https://stackoverflow.com/a/26906775/21419775

https://stackoverflow.com/a/37570455/21419775

Мой вариант реализации

public static void setMarqueeSpeed(TextView tv, float speed) {
    tv.post(new Runnable() {
        @Override
        public void run() {
            try {
                Field f;
                if (tv instanceof AppCompatTextView) {
                    f = tv.getClass().getSuperclass().getDeclaredField("mMarquee");
                } else {
                    f = tv.getClass().getDeclaredField("mMarquee");
                }
                f.setAccessible(true);
                Object marquee = f.get(tv);
                if (marquee != null) {
                    String scrollSpeedFieldName = "mPixelsPerMs";
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
                        scrollSpeedFieldName = "mPixelsPerSecond";
                    }
                    Log.d("TEST-MARQUEE", scrollSpeedFieldName);
                    Field mf = marquee.getClass().getDeclaredField(scrollSpeedFieldName);
                    mf.setAccessible(true);
                    mf.setFloat(marquee, mf.getFloat(marquee) * speed);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

Но у меня не удалось получить доступ к данному полю

Accessing hidden field Landroid/widget/TextView$Marquee;->mPixelsPerMs:F (greylist-max-o, reflection, denied)

Что самое смешное в этой ситуации, так это то что в самом Marquee есть TODO который, а чего писать, приведу цитату из файла TextView.java строка 13977

// TODO: Add an option to configure this

Буду благодарен, если существует библиотека которая и дает точь-в-точь такое же поведение и обратно совместима с тегами из xml. Если найду, то отпишусь в вопрос.


Ответы (0 шт):