<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/iconLayout"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/ibBlue"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/blue" />
<ImageButton
android:id="@+id/ibRed"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/red" />
<Button
android:id="@+id/ibSave"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/s" />
<Button
android:id="@+id/ibLoad"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/l" />
</LinearLayout>
<LinearLayout
android:id="@+id/pictureLayout"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="9"
android:gravity="center"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>

이런식인데 색은 변해요...근데 어떻게 짜도 저장에서 오류만 떠서 질문올려봅니다.
책보고 하는 중이라 마땅히 물어볼 사람이 없네요ㅠ 도와주세요
public class MainActivity extends AppCompatActivity {
final static int LINE = 1, CIRCLE = 2, FREE = 3;
static int curShape = LINE;
ImageButton ibBlue, ibRed;
MyView graphicView;
Paint mPaint;
Button ibSave, ibLoad;
ImageView pictureLayout;
String fileName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("미니 포토샵");
final LinearLayout pictureLayout = (LinearLayout) findViewById(R.id.pictureLayout);
graphicView = (MyView) new MyView(this);
pictureLayout.addView(graphicView);
//MyView myView = new MyView(this);
//setContentView(myView);
ibBlue = (ImageButton) findViewById(R.id.ibBlue);
ibBlue.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mPaint.setColor(Color.BLUE);
graphicView.invalidate();
}
});
ibRed = (ImageButton) findViewById(R.id.ibRed);
ibRed.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mPaint.setColor(Color.RED);
graphicView.invalidate();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, 1, 0, "선 그리기");
menu.add(0, 2, 0, "원 그리기");
menu.add(0, 3, 0, "자유롭게 그리기");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
curShape = LINE; // 선
return true;
case 2:
curShape = CIRCLE; // 원
return true;
case 3:
curShape = FREE; // 원
return true;
}
return super.onOptionsItemSelected(item);
}
public class MyView extends View {
int XX = -1, YY = -1, SXX = -1, SYY = -1;
int count = 0;
// float freex[] = new float[10000];
// float freey[] = new float[10000];
// boolean isDraw[] = new boolean[10000];
ArrayList freex = new ArrayList();
ArrayList freey = new ArrayList();
ArrayList isDraw = new ArrayList();
public MyView(Context context) {
super(context);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(3);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.RED);
}
@Override
public void onDraw(Canvas canvas) {
float startX, startY, stopX, stopY;
switch (curShape) {
case LINE:
canvas.drawLine(XX, YY, SXX, SYY, mPaint);
point_clear();
break;
case CIRCLE:
int radius = (int) Math.sqrt(Math.pow(SXX - XX, 2)
+ Math.pow(SYY - YY, 2));
canvas.drawCircle(XX, YY, radius, mPaint);
point_clear();
break;
case FREE:
/*
for (int i = 0; i < count-1 ; i++) {
if (isDraw[i]) {
startX = freex[i-1];
startY = freey[i-1];
stopX = freex[i];
stopY =freey[i];
canvas.drawLine(startX, startY, stopX, stopY, mPaint);
}
}
*/
for (int i = 0; i < isDraw.size()-1 ; i++) {
boolean tmp = (boolean)isDraw.get(i);
if (tmp) {
startX = (float)freex.get(i-1);
startY = (float)freey.get(i-1);
stopX = (float)freex.get(i);
stopY =(float)freey.get(i);
canvas.drawLine(startX, startY, stopX, stopY, mPaint);
}
}
break;
}
}
private void point_clear(){
//count = 0;
isDraw.clear() ;
freex.clear();
freey.clear();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x, y;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x = event.getX();
y = event.getY();
XX = (int)x;
YY = (int)y;
//isDraw[count] = false;
//freex[count] = x;
//freey[count] = y;
//count++;
isDraw.add(false) ;
freex.add(x);
freey.add(y);
if ( curShape == FREE)
graphicView.invalidate();
break;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
x = event.getX();
y = event.getY();
SXX = (int)x;
SYY = (int)y;
//isDraw[count] = true;
//freex[count] = x;
//freey[count] = y;
//count++;
isDraw.add(true) ;
freex.add(x);
freey.add(y);
graphicView.invalidate();
break;
}
return true;
}
}
}
전부 적으려니 글자 수 제한걸려서 축소시켜서 올렸는데 괜찮은지 모르겠네요...