안드로이드 개발 질문/답변
(글 수 45,052)
큰 Image를 앉히려고 합니다.
근데 ScrollView에 surfaceView(여기에 image그리기)를 앉혀서 좌우로 이동가능하도록 하려고 하는데 그려지지를 않습니다.
방법이 없을가요?
좀 도와주십시오.
2011.10.03 10:52:08
public class drawImageInScrollView extends Activity {
ScrollView mScrollLayout;
MySurfView myView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myView = new SufView(getApplicationContext());
mScrollLayout = (ScrollView) findViewById(R.id.scrollView1);
LayoutParams params = new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
mScrollLayout.addView(myView, params);
}class SurfView extends SurfaceView implements SurfaceHolder.Callback {
Bitmap mBack;
SurfaceHolder mHolder;
DrawThread mThread;
public SurfView(Context context) {
super(context);
mBack = BitmapFactory.decodeResource(context.getResources(), R.drawable.family);
mHolder = getHolder();
mHolder.addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mThread.bExit = true;
for(;;) {
try {
mThread.join();
break;
} catch (Exception e){;}
}
}
class DrawThread extends Thread {
boolean bExit;
SurfaceHolder mHolder;
DrawThread(SurfaceHolder Holder) {
mHolder = Holder;
bExit = false;
}
public void run() {
Canvas canvas;
while (bExit == false) {
synchronized(mHolder) {
canvas = mHolder.lockCanvas();
if (canvas == null) break;
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(mBack, 0, 0, null);
mHolder.unlockCanvasAndPost(canvas);
}
try { Thread.sleep(10); } catch (Exception e){;}
}
}
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mThread = new DrawThread(mHolder);
mThread.start();
}
}
}
위코드에서 스레드는 앞으로의 코드추가를 위해 만들었습니다.
2011.10.03 23:38:13
아 복잡해..;; 죄송해요 저도 초보자라.....
sview 는 뭔가 좀 복잡하지요.
저같은 경우는 그냥 sview 를 상속받는 클래스 생성후에
getHolder().addCallback(this) ;
getHolder().setFicedSize(getWidth(), getHeight());
thread = new thrad(this, getholder);
이렇게 하고 쓰래드를 상속받는 클래스를 따로 만들어서 그리기 작업을 했는데.
그 코드가 날아가 버렸네요... 고생한 코드인데.. 따로 저장해 놓을걸...;
아! 찾았네요.
public class Disc_View extends SurfaceView implements SurfaceHolder.Callback, Runnable{
Disc_EndCart car;
Context context;
Thread t1;
Canvas c;
Bitmap m1;
int w,h;
Rect r;
public Disc_View(Context context) {
super(context);
this.context = context;
getHolder().addCallback(this);
getHolder().setFixedSize(getWidth(), getHeight());
t1 = new Thread(this);
WindowManager wm = (WindowManager)context.getSystemService(context.WINDOW_SERVICE);
w = wm.getDefaultDisplay().getWidth();
h = wm.getDefaultDisplay().getHeight();
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
public void surfaceCreated(SurfaceHolder arg0) {
t1.start();
}
public void surfaceDestroyed(SurfaceHolder arg0) {
}
public void run() {
c = getHolder().lockCanvas();
addBack();
addtable();
addcart();
getHolder().unlockCanvasAndPost(c);
}
음... 별로 다른건 없어 보이는데요.



