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

그림판을 외장메모리에 저장하는 방법을 모르겠어요

0 추천
<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;
        }

    }

}
전부 적으려니 글자 수 제한걸려서 축소시켜서 올렸는데 괜찮은지 모르겠네요...
ㅋㅌㅃㅉ 님이 2019년 12월 10일 질문

1개의 답변

0 추천
저장에 어떤 오류가 나오는지 로그캣 보시고 해당오류 긁어서 구글에 찾아보시면

stackoverflow 같은데 가셔서 한국어 번역본으로보고 해결하시면됩니다
익명사용자 님이 2019년 12월 10일 답변
...