質問編集履歴

1

hidemaru

hidemaru score 22

2017/02/05 18:35  投稿

Androidアプリで、Bitmapが表示されない
###概要
Androidアプリで、作成したpng画像をBitmapで表示する処理を書いたのですが、実機のデバッグで起動すると、
`01-28 16:25:44.818   8951-8951/? E/Trace﹕ error opening trace file: No such file or directory (2)`
と表示され、画面が真っ白のままになっていました。
![実機起動時](042f570f70bff0933f43bef1192562b7.png)
###コード
**Index.java**
```lang-java
package jp.co.hokkaido.nakafurano.hideo.kodama.rapidrescue;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
/**
* Created by kodamahideo on 2016/09/08.
*/
public class Index extends Activity {
   @Override
   protected void onCreate(Bundle bundle){
       super.onCreate(bundle);
       getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       setContentView(new IndexView(this));
   }
}
```
**IndexView.java**
```lang-java
package jp.co.hokkaido.nakafurano.hideo.kodama.rapidrescue;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Rect;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
/**
* Created by kodamasatoru on 2016/09/08.
*/
public class IndexView extends View {
   private final static int
       W = 480,
       H = 800;
   private Graphics g;
   private Bitmap bmp;
   private int DH;
   public IndexView(Activity activity) {
       super(activity);
       Display display = activity.getWindowManager().getDefaultDisplay();
       Point p = new Point();
       display.getSize(p);
       int dh = W*p.y/p.x;
       this.DH = dh;
       g = new Graphics(W,dh);
       g.setOrigin(0,(dh-H)/2);
   }
   @Override
   protected void onDraw(Canvas canvas){
       super.onDraw(canvas);
       //TODO 背景描画
       Resources r = getResources();
       bmp = BitmapFactory.decodeResource(r,R.drawable.title);
       g.drawBitmap(bmp,0,0);
       int w = bmp.getWidth();
       int h = bmp.getHeight();
       Rect src = new Rect(0, 0, w, h);
       // 描画先の矩形イメージ
       Rect dst = new Rect(0, 0, 480, DH);
       g.drawBitmap(bmp,src,dst);
   }
   @Override
   public boolean onTouchEvent(MotionEvent event){
       int touchAction = event.getAction();
       if (touchAction == MotionEvent.ACTION_DOWN){
           getContext().startActivity(new Intent(getContext(),Main.class));
       }
       return true;
   }
}
```
**Graphics.java**  
```lang-java  
 
package net.npaka.puzzlegame;  
import android.graphics.Bitmap;  
import android.graphics.Canvas;  
import android.graphics.Paint;  
import android.graphics.Paint.FontMetrics;  
import android.graphics.Rect;  
 
//グラフィックス(9)  
public class Graphics {  
   private Paint paint; //ペイント  
   private Bitmap bmp;   //ビットマップ  
   private Canvas canvas; //キャンバス  
   private int   originX;//原点X  
   private int   originY;//原点Y  
 
   //コンストラクタ  
   public Graphics(int w, int h) {  
       bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);  
       canvas = new Canvas(bmp);  
       paint = new Paint();  
       paint.setAntiAlias(true);  
   }  
 
   //ビットマップの取得  
   public Bitmap getBitmap() {  
       return bmp;  
   }  
 
   //描画原点の指定  
   public void setOrigin(int x, int y) {  
       canvas.translate(x, y);  
       originX = x;  
       originY = y;  
   }  
 
   //描画原点のX座標の取得  
   public int getOriginX() {  
       return originX;  
   }  
 
   //描画原点のY座標の取得  
   public int getOriginY() {  
       return originY;  
   }  
 
   //色の指定  
   public void setColor(int color) {  
       paint.setColor(color);  
   }  
 
   //フォントサイズの指定  
   public void setTextSize(int fontSize) {  
       paint.setTextSize(fontSize);  
   }  
 
   //フォントメトリックスの取得  
   public FontMetrics getFontMetrics() {  
       return paint.getFontMetrics();  
   }  
 
   //文字幅の取得  
   public int measureText(String string) {  
       return (int)paint.measureText(string);  
   }  
 
   //塗り潰し矩形の描画  
   public void fillRect(int x, int y, int w, int h) {  
       if (canvas == null) return;  
       paint.setStyle(Paint.Style.FILL);  
       canvas.drawRect(new Rect(x, y, x+w, y+h), paint);  
   }  
 
   //ビットマップの描画  
   public void drawBitmap(Bitmap bitmap, int x, int y) {  
       if (canvas == null) return;  
       int w = bitmap.getWidth();  
       int h = bitmap.getHeight();  
       Rect src = new Rect(0, 0, w, h);  
       Rect dst = new Rect(x, y, x+w, y+h);  
       canvas.drawBitmap(bitmap, src, dst, null);  
   }  
 
   //ビットマップの描画  
   public void drawBitmap(Bitmap bitmap, Rect src, Rect dst) {  
       if (canvas == null) return;  
       canvas.drawBitmap(bitmap, src, dst, null);  
   }  
 
   //文字列の描画  
   public void drawText(String string, int x, int y) {  
       if (canvas == null) return;  
       canvas.drawText(string, x, y, paint);  
   }  
}  
```  
ちなみに、画像の場所は、
app/src/main/res/drawable-nodpi/title.png
です。
どこに問題があるのでしょうか。
  • Java

    16163 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7406 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4361 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る