2013-05-30 2 views
0

메인 자동 생성 클래스가 있습니다. 난 XML에서 선언 한 내 이미지보기에 간단한 ic_launcher PNG를 그려야 겠어.외부 클래스에서 이미지 비트 맵을 설정하는 방법?

내 주요 클래스 :

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     MyCanvas can = new MyCanvas(this); 
     //ImageView img = (ImageView) findViewById(R.id.imageView1); 
     //img.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); 
    } 
} 

클래스는 내가 만든 :

public class MyCanvas extends View{ 


    public MyCanvas(Context context) { 
     super(context); 
     ImageView img = (ImageView) findViewById(R.id.imageView1); 
     img.setImageBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher)); 
    } 
} 

당신은 내 주요 활동에서 비트 맵을 설정 주석 알 수 있습니다. 그것은 시험 이었기 때문입니다. 이 코드는 주 활동에서 완벽하게 작동하지만 다른 반에서 실패합니다. logCat의 작동 방식을 모르지만 "null 포인터 예외"가 표시됩니다. 나는 거의 긍정적이다. ImageView를로드 할 때 오류가 발생한다.

나는 이것을 시도했다 : context.findViewById (R.id.imageView1); 아무 소용이 없습니다.

참고로 이미지의 ID는 imageView1입니다.

public MyCanvas(Context context,ImageView img) { 
     super(context); 
     img.setImageBitmap(BitmapFactory.decodeResource(context.getResources(), 
               R.drawable.ic_launcher)); 
    } 

및 활동에서로 이미지 뷰 인스턴스를 보내 : MyCanvas에서

setContentView(R.layout.activity_main); 
ImageView img = (ImageView) findViewById(R.id.imageView1); 
MyCanvas can = new MyCanvas(this,img); 
+0

'logCat의 작동 방식을 모르겠습니다. '- 배우셔야합니다. 중요한 기술이고 오류가 발생한 위치를 정확히 알려주었을 것입니다. 그런 다음 디버거가 정확히 무엇을 null로 표시하는지 보여줍니다. – Simon

답변

3

으로 활동에 초기화 후 ImageView 예를 보내는 MyCanvas 클래스 사용 MyCanvas 클래스 생성자에서 이미지 뷰 이미지를 변경 View 클래스의 findViewById를 사용하고 있으며 activity 클래스에서와 다른 children 뷰를 검색합니다.

예를 들어 MainActivity 1st에서 루트 레이아웃을 찾아 매개 변수로 MyCanvas에 전달할 수 있습니다.

+0

많이 감사합니다. – user2316667

관련 문제