2013-08-29 4 views
7

res/drawable/schoolboard.png으로 배치 된 이미지에 원을 그리려합니다. 이미지가 활동 배경을 채 웁니다. 다음은 작동하지 않습니다 :기존 이미지에 원을 그립니다.

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.schoolboard); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setColor(Color.BLUE); 

    Canvas canvas = new Canvas(bitmap); 
    canvas.drawCircle(60, 50, 25, paint); 

    ImageView imageView = (ImageView)findViewById(R.drawable.schoolboard); 
    imageView.setAdjustViewBounds(true); 
    imageView.setImageBitmap(bitmap); 

어떤 도움을 주시면 감사하겠습니다. 감사.

답변

10

코드에서 몇 가지 오류가 있습니다에서 이미지 ID는 findViewById에 당김에 대한 참조 ID를 제공 할 수없는 일은 첫 번째는 그래서 난 당신이

ImageView imageView = (ImageView)findViewById(R.id.schoolboard_image_view); 

schoolboard_image_view 같은 의미라고 생각됩니다 당신의 XML 레이아웃 (오른쪽 id 인 레이아웃을 확인)

BitmapFactory.Options myOptions = new BitmapFactory.Options(); 
    myOptions.inDither = true; 
    myOptions.inScaled = false; 
    myOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;// important 
    myOptions.inPurgeable = true; 

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.schoolboard,myOptions); 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setColor(Color.BLUE); 


    Bitmap workingBitmap = Bitmap.createBitmap(bitmap); 
    Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true); 


    Canvas canvas = new Canvas(mutableBitmap); 
    canvas.drawCircle(60, 50, 25, paint); 

    ImageView imageView = (ImageView)findViewById(R.id.schoolboard_image_view); 
    imageView.setAdjustViewBounds(true); 
    imageView.setImageBitmap(mutableBitmap); 

에 적합한 이미지 ID를 사용할 수 있는지 확인하십시오 :

ImageView imageView = (ImageView) findViewById (R.id.schoolboard_image_view);

+1

두 분 모두에게 감사드립니다. RelativeLayout에서 스쿨 보드 이미지가'android : background = "@ drawable/schoolboard"로 정의되기 전에 xml 파일을 이미지 뷰로 변환했습니다. 지금 그것은 작동한다! – Kfir

5

우선 BitmapFactory.decodeResource() 메서드의 비트 맵이 변경되지 않기 때문에 새 비트 맵을 만들어야합니다. 다음 코드로이 작업을 수행 할 수 있습니다.

Bitmap canvasBitmap = Bitmap.createBitmap([bitmap_width], [bitmap_height], Config.ARGB_8888); 

이 비트 맵을 Canvas 생성자에서 사용하십시오. 그런 다음 캔버스에 비트 맵을 그립니다.

Canvas canvas = new Canvas(canvasBitmap); 
canvas.drawBitmap(bitmap, 0, 0, bitmapPaint); 
canvas.drawCircle(60, 50, 25, paint); 

또한 R.drawable.schoolboard는 올바른 뷰 ID가 아닙니다.

ImageView imageView = (ImageView) findViewById (R.drawable.schoolboard);

관련 문제