1번파일에
버튼을 누르면 실행되게 되어있습니다.
linecolor = (Button)findViewById(R.id.linecolor);
linecolor.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Bitmap backGround = bmp;
new LineAdd();
}
});
LineAdd 가 이미지 그리는 파일이구요 저렇게 하니깐 안불려지더라구요;;; 다른파일을 부를때 인텐트같은거 써야하나요 ?
2번파일 LineAdd파일입니다.
package com.CameraPR;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
public class LineAdd extends Activity {
private DrawView vw;
ArrayList<Vertex> arVertex;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
// 기존 뷰는 사용하지 않는다.
// 새로운 뷰를 생성하여 액티비티에 연결
vw = new DrawView(this);
setContentView(vw);
arVertex = new ArrayList<Vertex>();
}
public class Vertex {
float x;
float y;
boolean draw;
// 그리기 여부
public Vertex(float x, float y, boolean draw) {
this.x = x;
this.y = y;
this.draw = draw;
}
}
protected class DrawView extends View {
Paint mPaint;
// 페인트 객체 선언
public DrawView(Context context) {
super(context);
// 페인트 객체 생성 후 설정
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(3);
mPaint.setAntiAlias(true);
// 안티얼라이싱
}
/** 터치이벤트를 받는 함수 */
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
arVertex.add(new Vertex(event.getX(), event.getY(), false));
break;
case MotionEvent.ACTION_MOVE:
arVertex.add(new Vertex(event.getX(), event.getY(), true));
}
invalidate();
// onDraw() 호출
return true;
}
/** 화면을 계속 그려주는 함수 */
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
// 캔버스 배경색깔 설정
// 그리기
for (int i = 0; i < arVertex.size(); i++) {
if (arVertex.get(i).draw) {
// 이어서 그리고 있는 중이라면
canvas.drawLine(arVertex.get(i - 1).x,
arVertex.get(i - 1).y, arVertex.get(i).x,
arVertex.get(i).y, mPaint);
// 이전 좌표에서 다음좌표까지 그린다.
} else {
canvas.drawPoint(arVertex.get(i).x, arVertex.get(i).y,
mPaint);
// 점만 찍는다.
}
}
}
}
}
1번 파일에 버튼을 누르면 선택한 이미지를 백그라운드에 넣고 2번파일을 불러와 낙서같은 효과를 주는게 되나요 ?




일단 LineAdd Activity를 띄워주려면
new LineAdd(); 대신 startActivity를 써야 하구요.
이때 배경화면을 넘겨줘야 하니까 bundle에 String type으로 배경화면 path를 넘겨주는 것이 좋을 것 같습니다
즉 new LineAdd(); 있는 부분에
Intent intent = new Intent(this, LineAdd.class);
Bundle b = new Bundle();
b.putString("Background", BackgroundPath);
intent.putExtras(b);
startActivity(intent);
로 하면 LineAdd Activity가 뜰거구요.
LineAdd OnCreate 에서
Bundle b = getIntent().getExtras();
String path = b.getString("Background");
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inSampleSize = 2;
Bitmap bm = BitmapFactory.decodeFile(path, bfo);
if(bm == null)
{
에러처리 or DrawView.setBackgroundColor(0xFFAAAAAA); 등으로 기본 배경 처리
}
else
{
DrawView.setBackgroundDrawable(new BitmapDrawable(bm));
}
DrawView 다른 부분을 자세히 보진 않았지만
제대로 구현 되었다면 동작될 것으로 생각합니다.
그리고 위의 bfo.inSampleSize 는 이미지를 어떤크기로 가져올 건지를 결정하는 옵션입니다.
1이면 1/1, 2면 1/2, 4면 1/4 ....... 이렇게 되며,
숫자가 클 수록 작게 가져오므로 메모리엔 이득이나,
가져온 크기보다 뿌려야할 영역이 크다면 이미지가 깨질 수 있겠죠.
이미지를 크게 가져오면 메모리 문제가 발생할 수도 있습니다.