마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서피스뷰를 findViewID로 찾는 부분에서 에러가 발생합니다.

0 추천
public class MainActivity extends Activity {
	
	String LibTag = 	"Lib";
	
	SufView				sfView;
	Button				BtnStart, BtnStop;
	private final int _MRV_START = 1;
	private final int _MRV_STOP  = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main);        
        
        //sfView = (SufView) findViewById(R.id.surfaceView1); //이부분 주석풀면 실행종료되요
        BtnStart = (Button) findViewById(R.id.button1);
        BtnStop = (Button) findViewById(R.id.button2);
        
        BtnStart.setOnClickListener(startListener);
        BtnStop.setOnClickListener(stopListener);
    }
    
    Button.OnClickListener startListener = new Button.OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			sfView.setSelectNumber(_MRV_START);			
		}    	
    };
    
    Button.OnClickListener stopListener = new Button.OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			sfView.setSelectNumber(_MRV_STOP);
		}    	
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

class SufView extends SurfaceView implements SurfaceHolder.Callback {
	
	String sfViewLibTag 	= "sfView";
	
	private boolean 		bInit;		
	private int				selectNum;
	
	private Context			context;
	private SurfaceHolder   holder;
	private Paint 			paint;
	private Path 			path;
	//private WorkerThread    wThread;
	
	public SufView(Context context, AttributeSet attrs) {
		super(context);
		// TODO Auto-generated constructor stub
		this.context = context;
		this.holder = getHolder();
		this.holder.addCallback(this);
		
		//wThread = new WorkerThread(context, holder, this);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		if (!bInit) {
			canvas.drawColor(Color.BLACK, Mode.CLEAR);
			bInit = true;
		}
		if (canvas == null) {
			Log.e(sfViewLibTag, "canvas is null");
		} else {
			canvas.drawPath(path, paint);
		}
	}
	
	public void setSelectNumber(int num) {
		this.selectNum = num;
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
		// TODO Auto-generated method stub
		Log.d(sfViewLibTag, "surfaceChanged called...");
		
		paint = new Paint();
		paint.setAntiAlias(true);
		paint.setColor(Color.WHITE);
		paint.setStrokeWidth(10);
		paint.setStyle(Paint.Style.STROKE);
		
		setFocusable(true);
		
		path = new Path();
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		Log.d(sfViewLibTag, "surfaceCreated called...");
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		Log.d(sfViewLibTag, "surfaceDestroyed called...");
	}		
}

 

지금 쓰레드는 연결도 안한 상태로 서피스뷰만 연결하려고 하면 실행되다가 죽어버립니다. 어떤부분을 손봐야 될 지 알려주시면 감사하겠습니다.

emerald (760 포인트) 님이 2014년 8월 6일 질문

1개의 답변

0 추천

xml이랑 로그도 좀 올려주세요..

커스텀한 뷰를 xml 레이아웃에서 사용하시려면

<com.example.mypackage.SufView
        android:id="@+id/mySufView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#00000000"
        android:gravity="top" />
이런 식으로 xml에 정의해야합니다.
Gioskhan (12,060 포인트) 님이 2014년 8월 6일 답변
...