Не могу найти публичные методы из пользовательского SurfaceView, который расширяет Runnable и вложен в макет - PullRequest
0 голосов
/ 18 февраля 2019

Так что у этого приложения есть собственный SurfaceView, который расширяет Runnable.

Сначала myView использовался напрямую в MainActivity, а не через какие-либо макеты, и работал так, как должен.Содержимое, отображаемое с помощью run (), зависит от высоты экрана, которую я передавал из MainActivity.Затем я решил вложить представление и сделать его содержимое зависимым от высоты макета.

После вложения его в LinearLayout я использовал getLayoutParams () в коде в init (), и только тогда MainActivity перестала распознавать паузу() и резюме () функции.Я полагаю, что я могу объявлять пользовательское представление в MainActivity неверным способом, но я не могу найти соответствующие источники

MainActivity

    public class MainActivity extends Activity {

    private SurfaceView myView1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView1 = findViewById(R.id.myView);
        setContentView(R.layout.myParentLayout);
    }
    @Override
    protected void onPause(){
        super.onPause();
        myView1.pause();    //cannot recognise this function
    }
    @Override
    protected void onResume(){
        super.onResume();
        myView1.resume();   //and this function
    }
}

myView

class myView extends SurfaceView implements Runnable {
    public Context context;
    private SurfaceHolder surfaceHolder;
    private boolean running;
    private Thread thread;
    private myClass l;   //imported classes
    public myView(Context context) {
        super(context);
        init();
    }
    public myView(Context context, AttributeSet attrs){
        super(context,attrs);
        init();
    }
    public myView(Context context, AttributeSet attrs, int defStyleAttr){
        super(context,attrs, defStyleAttr);
        init();
    }
    private void init(){
        surfaceHolder = getHolder();
        int x = getLayoutParams().width;  //happened after i added this
        l = new myClass(x);
    }
    @Override
    public void run(){
        while (running){
            /*doing stuff*/
        }
    }
    public void pause(){
        running = false;
        try{
            thread.join();
        }catch (InterruptedException e){
            e.fillInStackTrace();
        }
    }
    public void resume(){
        running = true;
        thread = new Thread(this);
        thread.start();
    }
}
...