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

뷰클래스 호출 질문드립니다..

0 추천
 
public class CustomNeedle extends View{
 
    float an;
    MainActivity ma;
 
    Bitmap pin1; //바늘의 이미지
    int originalPinX, originalPinY; //원본 바늘의 크기
 
    public CustomNeedle(Context context){
        super(context);
        init();
        an = ma.angle;
        Log.d("앵글값", an + "");
    }
 
    private void init() {
 
        pin1 = BitmapFactory.decodeResource(getResources(), R.drawable.meter_needle);
        //화면에 표시할 바늘이미지를 불러 pin1변수에 저장
 
        originalPinX = pin1.getWidth(); //원본 바늘이미지크기 구하기
        originalPinY = pin1.getHeight(); //원본 바늘이미지크기 구하기
    }
 
    @Override
    protected void onDraw(Canvas canvas){
//        Log.d("앵글값", an + "");
        canvas.rotate(an, originalPinX/2, originalPinY/2);
        canvas.drawBitmap(pin1, 0, 0,null);
    }
 
 
이렇게 그려주는 뷰클래스를 따로 작성하고
 
메인액티비티에서
 
 private SeekBar.OnSeekBarChangeListener seekbarRotateChangeListener =
            new SeekBar.OnSeekBarChangeListener() {
 
                public void onProgressChanged(SeekBar seekBar,
                                              int progress, boolean fromUser) {
 
                    angle = (float)progress;
                    customNeedle.invalidate();
 
 
                }
 
이렇게 뷰클래스호출했는데 에러가뜨는데 이해가 잘 안됩니다 ㅠㅠ
}
 
예림이그코드좀바바 (2,470 포인트) 님이 2015년 1월 23일 질문

1개의 답변

0 추천
 
채택된 답변
이런 질문을 올릴 때는 어디서 무슨 오류가 발생하는지 정보를 올리세요.
익명사용자 님이 2015년 1월 23일 답변
예림이그코드좀바바님이 2015년 3월 2일 채택됨
죄송합니다 오류는 customNeedle.invalidate(); 에서
java.lang.NullPointerException 이나네요..

뷰클래스객체만들어서 그걸 다시그려주려한건데 값이 아예없나봐요..
스택트레이스를 보면 NullPointerException이 발생한 라인이 표시됩니다.
그 부분에서 어느 변수가 null인지와 왜 null인지를 분석해보세요.
애초에 new로 객체생성자체도 안해줫네요..
아 기초중에기초를 맨날 안하고 변수만 선언해놓고 헷갈렷네요 ㅠㅠ
그부분은 해결해도 메인액티비티에서 커스텀클래스호출 invalidate해도
커스텀클래스의 onDraw가 호출이안대네요
canvas.rotate(an, originalPinX/2, originalPinY/2);
        canvas.drawBitmap(pin1, 0, 0,null);
따로정의한 뷰클래스에서 화면을 그리는건안대나보군요
뷰객체를 new로 생성한 경우 액티비티의 view tree에 추가를 해야 화면에 표시됩니다. 이게 귀찮으면 xml에 넣어서 처리하면 됩니다.
간단하게 코드로 예를 좀 들어주실수있을까요..
...