Отключить прокрутку на Android ТВ - PullRequest
1 голос
/ 13 января 2020

как я могу создать собственный класс с прокручиваемым просмотром без прокрутки? Я попробовал это:

import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class DisabledScrollView extends ScrollView {

    // true if we can scroll (not locked)
    // false if we cannot scroll (locked)
    private boolean mScrollable = false;

    public DisabledScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }
    public DisabledScrollView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public DisabledScrollView(Context context)
    {
        super(context);
    }

    public void setScrollingEnabled(boolean enabled) {
        mScrollable = enabled;
    }

    public boolean isScrollable() {
        return mScrollable;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        return false ;
    }
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        return false ;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // if we can scroll pass the event to the superclass
                if (mScrollable) return super.onTouchEvent(ev);
                // only continue to handle the touch event if scrolling enabled
                return mScrollable; // mScrollable is always false at this point
            default:
                return super.onTouchEvent(ev);
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // Don't do anything with intercepted touch events if
        // we are not scrollable
        if (!mScrollable) return false;
        else return super.onInterceptTouchEvent(ev);
    }


}

, однако я все еще могу прокручивать.

Этот класс, кажется, работает только на сенсорных устройствах, с android tv я использую клавишу направления.

Как я могу изменить этот класс для работы на android ТВ? Мне нужно иметь возможность прокручивать только программно, а не с помощью пэда. Спасибо

1 Ответ

1 голос
/ 14 января 2020

Вы можете использовать обратный вызов dispatchKeyEvent ScrollView -

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    if (event.getAction() == KeyEvent.ACTION_UP) {
        switch (event.getKeyCode()) {
            case KeyEvent.KEYCODE_DPAD_DOWN:
                if (mScrollable) {
                    return super.dispatchKeyEvent(event);
                }
                break;
        }
    }
    return true;
}

В основном делает то же самое, но с событиями Dpad вместо касания.

Возврат true после обработки событие.

...