Может ли кто-нибудь помочь мне создать SurfaceView во фрагменте? Ниже мой код. Он всегда останавливается на линии thr: if (! SurfaceHolder.getSurface(). IsValid()), и я не знаю почему.Не удается создать surfaceView во фрагменте
фрагмент кода:
<pre>
public class FirstActivity extends Fragment/* implements OnTouchListener*/ {
CameraView cameraView;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
/* instantiating the surface view */
cameraView = new CameraView(this.getActivity());
/* setting the listener - this, because it is defined within the activity */
// cameraView.setOnTouchListener(this);
}
// public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// View v = inflater.inflate(R.layout.lin, null);
//
// cameraView = (CameraView) v.findViewById(R.id.cameraView);
//
// return v;
//
// }
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return new CameraView(getActivity());
}
// @Override
// public boolean onTouch(View arg0, MotionEvent arg1) {
// // TODO Auto-generated method stub
// return false;
// }
@Override
public void onStart() {
super.onStart();
}
@Override
public void onResume() {
super.onResume();
cameraView.onResumeCameraView();
}
@Override
public void onPause() {
super.onPause();
cameraView.onPauseCameraView();
}
}
</pre>
код CameraView:
<pre>
public class CameraView extends SurfaceView implements Runnable {
Thread thread = null;
SurfaceHolder surfaceHolder;
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Bitmap bitmap;
int WIDTH = 320;
int HEIGHT = 240;
volatile boolean running = false;
public CameraView(Context context) {
super(context);
// TODO Auto-generated constructor stub
surfaceHolder = getHolder();
bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888/*Bitmap.Config.ALPHA_8*//*Bitmap.Config.RGB_565*/);
Log.d("S3", "stworzono bitmape");
}
public void onResumeCameraView() {
running = true;
thread = new Thread(this);
thread.start();
}
public void onPauseCameraView() {
boolean retry = true;
running = false;
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void run() {
// TODO Auto-generated method stub
while (running) {
if (!surfaceHolder.getSurface().isValid()) {
Log.d("S3", "blad");
continue;
}
Log.d("S3", "dalej");
Canvas canvas = surfaceHolder.lockCanvas();
canvas.drawColor(Color.WHITE);
paint.setColor(Color.RED);
canvas.drawRect(0, 0, 100, 100, paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
</pre>
Спасибо за помощь.
Если «останавливается», вы имеете в виду, что ваше приложение выходит из строя, используйте LogCat для проверки трассировки стека Java, связанной с вашим сбоем: https://stackoverflow.com/questions/23353173/ru -myapp-has-stop-how-can-i-solve-this – CommonsWare
Нет, по остановкам, я имею в виду, что surfaceHolder.getSurface(). isValid() возвращает всегда false. Поэтому он останавливается на этом «если». – user5354725