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

안드로이드 리셋 관련 궁금 합니다.그리고invalidate관련

0 추천
package com.example.administrator.myapplication;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.util.Vector;

class stay1 extends View
{String s="";
    final int r=300;
    final double fi=3.141592;
   Vector<Integer> vector1=new Vector<Integer>();
    Vector<Integer> vector2=new Vector<Integer>();
    Vector<Integer> vector3=new Vector<Integer>();
    Vector<Integer> vector4=new Vector<Integer>();
    int w=360,h=540;

    int a=0,b=0,c,e=0,f=0,g;
    int x[]=new int[30],y[]=new int[30];
    public stay1(Context context) {
        super(context);
    }

    public stay1(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        Path path = new Path();
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        path.addCircle(w,h, r, Path.Direction.CW);
        path.addCircle(w, h, r+100, Path.Direction.CW);

        paint.setColor(Color.BLUE);
        canvas.drawPath(path, paint);
        paint.setStyle(Paint.Style.FILL);
        paint.setTextSize(32);
        canvas.drawTextOnPath("     6     7     8     9     10     11     12     13     14     15     16     17     18     19   " +
                "  20     21     22     23     0     1     2     3     4     5", path, -30, -20, paint);
        RectF rectF=new RectF(60,240,660,840);

           y[0]=h;
                x[0]=w+r;

            y[1]=h+(int)(r*Math.sin(15*fi/180));
                x[1]=w+(int)(300*Math.sin(75*fi/180));
          y[2]=h+(int)(r*Math.sin(30*fi/180));
        x[2]=w+(int)(r*Math.sin(60*fi/180));
          y[3]=h+(int)(r*Math.sin(45*fi/180));
          x[3]=w+(int)(r*Math.sin(45*fi/180));
           y[4]=h+(int)(r*Math.sin(60*fi/180));
           x[4]=w+(int)(300*Math.sin(30*fi/180));
           y[5]=h+(int)(300*Math.sin(75*fi/180));
           x[5]=w+(int)(300*Math.sin(15*fi/180));
        y[6]=h+300;
        x[6]=w;
        y[7]=h+(int)(r*Math.sin(75*fi/180));
        x[7]=w-(int)(r*Math.sin(15*fi/180));
        y[8]=h+(int)(r*Math.sin(60*fi/180));
        x[8]=w-(int)(r*Math.sin(30*fi/180));
        y[9]=h+(int)(r*Math.sin(45*fi/180));
        x[9]=w-(int)(r*Math.sin(45*fi/180));
        y[10]=h+(int)(r*Math.sin(30*fi/180));
        x[10]=w-(int)(r*Math.sin(60*fi/180));
        y[11]=h+(int)(r*Math.sin(15*fi/180));
        x[11]=w-(int)(r*Math.sin(75*fi/180));
       y[12]=h;
       x[12]=w-300;
        y[13]=h-(int)(300*Math.sin(15*fi/180));
        x[13]=w-(int)(300*Math.sin(75*fi/180));
        y[14]=h-(int)(300*Math.sin(30*fi/180));
        x[14]=w-(int)(300*Math.sin(60*fi/180));
        y[15]=h-(int)(300*Math.sin(45*fi/180));
        x[15]=w-(int)(300*Math.sin(45*fi/180));
        y[16]=h-(int)(300*Math.sin(60*fi/180));
        x[16]=w-(int)(300*Math.sin(30*fi/180));
        y[17]=h-(int)(300*Math.sin(75*fi/180));
        x[17]=w-(int)(300*Math.sin(15*fi/180));
        y[18]=h-300;
        x[18]=w;
        y[19]=h-(int)(300*Math.sin(75*fi/180));
        x[19]=w+(int)(300*Math.sin(15*fi/180));
        y[20]=h-(int)(300*Math.sin(60*fi/180));
        x[20]=w+(int)(300*Math.sin(30*fi/180));
        y[21]=h-(int)(300*Math.sin(45*fi/180));
        x[21]=w+(int)(300*Math.sin(45*fi/180));
        y[22]=h-(int)(300*Math.sin(30*fi/180));
        x[22]=w+(int)(300*Math.sin(60*fi/180));
        y[23]=h-(int)(300*Math.sin(15*fi/180));
        x[23]=w+(int)(300*Math.sin(75*fi/180));

      //  b=a+b;
        vector1.add(a);
        vector2.add(b);
        vector3.add(e);
        vector4.add(f);
        a=a+b;
        e=e+f;
        c=vector1.size();
        g=vector3.size();

        Path[] path1=new Path[30];

        for(int i=0;i<c;i++)
        {
            paint.setColor(Color.BLACK);
            canvas.drawArc(rectF,vector1.get(i),vector2.get(i),true,paint);

        }
        for(int i=0;i<g;i++) {

            paint.setColor(Color.WHITE);
            path1[i] = new Path();
            path1[i].moveTo(x[vector3.get(i)], y[vector3.get(i)]);
            path1[i].lineTo(w, h);
            paint.setTextSize(30);
            canvas.drawTextOnPath(s, path1[i], 0, 0, paint);
        }

    }
}
public class MainActivity extends AppCompatActivity {
    int d=0,e=0,f=0;
    EditText editText;
    int width,height;
    stay1 stay1;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.sub);
        editText=(EditText)findViewById(R.id.editText);
        width = getWindowManager().getDefaultDisplay().getWidth();
        height = getWindowManager().getDefaultDisplay().getHeight();
        textView=(TextView)findViewById(R.id.textView3);
        stay1=(stay1)findViewById(R.id.view);

    }
    public void on1(View v)
    {

           stay1.s=editText.getText().toString();
                stay1.b=d;
                stay1.f=e;
       //  String s=editText.getText().toString();
             //   int c=Integer.parseInt("12");

        stay1.invalidate();

    }
    public void on2(View v)
    {
        d+=15;
        e+=1;
        f++;
        textView.setText(f+"시간");
    }
    public void on3(View v)
    {
        d-=15;
        e-=1;
        f--;
        textView.setText(f+"시간");
    }
    public void on4(View v)
    {
         stay1.vector1.clear();
        stay1.vector2.clear();
        stay1.vector3.clear();
        stay1.vector4.clear();

        f=0;
        stay1.invalidate();
    }
}

 

텍스트를 입력할 때 invalidate가 호출되서 계속 부채꼴이 그려짐. 텍스트를 입력할 때 invalidate를 호출한 적은 없음
PC에서는 텍스트 입력할 때 invalidate가 호출 안 되서 잘 되는데 핸드폰에서만 계속 invalidate가 호출됨

왜 그런지 모르겠어요

그리고
clear를 이용해서 reset을 하려는데 전부다 리셋이 되지 않고 하나만 남고 리셋이 되지 않아요.
제가 원하는 건 전부다 리셋이 되는 거에요 어떻게 해야하는지 모르겠어요. 벡터를 하나하나 나누어 그런건가요? 벡터 사용법이 잘못 된건가요?
dddffaaas123 (230 포인트) 님이 2017년 1월 23일 질문
dddffaaas123님이 2017년 1월 24일 수정
사용하신 vector clear가 안된다는 말씀이시지요? clear 함수 자체가 원래 모든 아이템 초기화 동작을 합니다.뭔가 시점에 의해서 add가 되는 부분이 있는거 같은데 그 부분을 찾으셔야 해요. 참고로 Vector 같은경우는 일반 List와는 다르게 synchronized 설정이 되어 있어서 add 동작이 clear 시점에 밀려서 이후에 동작 하는 경우가 있을수도 있는데 저는 이부분이 의심스럽네요.

그리고 질문 올리실때 가급적이면 기본적으로 본인이 확인 가능한 부분은 미리 다 체크 해보고 중요한 요점만 질문하시는것이 질문자님의 의도 파악도 쉽고 답변 드리기도 수월하고 또한 구체적인 답변을 드릴수 있기 때문에 질문자님 정신 건강에도 훨씬 좋을 수 있답니다. ^^

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...