Так что у этого приложения есть собственный 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();
}
}