3

リソースからビットマップを作成し、その上に単純なテキストを描画しようとしています。コードはコンパイルされて実行されますが、ボタンをクリックするとアプリが AVD でクラッシュしました。何が問題なのですか?

package apc.examples;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about_me);

    }
    public void showAboutMessage(View v)
    {

        Bitmap marked= BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
        ImageView portrait = (ImageView) findViewById(R.id.imageView1);
        Canvas canvas = new Canvas(marked);
        canvas.drawBitmap(marked, 0, 0, null);
     Paint paint = new Paint();
            paint.setColor(Color.WHITE);
               paint.setTextSize(10);
           canvas.drawText("asfasf",0, 0, paint);
            portrait.setImageBitmap(marked);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.about_me, menu);
        return true;
    }

}
4

2 に答える 2

1

リソース ビットマップは不変です。書き込む前に、変更可能なビットマップにコピーする必要があります。このチュートリアルのコード スニペットを次に示します。

  Bitmap marked= BitmapFactory.decodeResource(getResources(), R.drawable.my_image);

  android.graphics.Bitmap.Config bitmapConfig =
      marked.getConfig();
  // set default bitmap config if none
  if(bitmapConfig == null) {
    bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
  }
  // resource bitmaps are imutable, 
  // so we need to convert it to mutable one
  bitmap = bitmap.copy(bitmapConfig, true);
于 2013-07-01T03:43:51.363 に答える