質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.09%

DisplaySizeが取得できません

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 991

score 12

Android 初心者です、宜しくお願い致します。

画像の表示、ディスプレイサイズ、画像のサイズを取得する簡単な
プログラムです。

画像は表示されますが、ディスプレイサイズ、画像のサイズは表示
されずにエラーが出ます。

エラーの原因も意味もわかりません、

Androidに詳しい方、なにとど宜しくお願い致しまします。

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

//スライドパズル
public class PuzzleGame extends Activity
{
//アクティビティ起動時に呼ばれる
@Override
public void onCreate( Bundle bundle )
{
super.onCreate( bundle ) ;
Util.setActivity( this ) ;

//フルスクリーンの指定
getWindow().clearFlags( WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN ) ;
getWindow().addFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN ) ;
requestWindowFeature( Window.FEATURE_NO_TITLE ) ;

//ビューの追加
setContentView( new PuzzleView( this ) ) ;
}

class PuzzleView extends View
{
//イメージ
private Bitmap imgBg     ;   //背景
private Bitmap imgFrame  ;   //フレーム
private Bitmap imgPic    ;   //絵
private Bitmap imgTitle  ;   //タイトル
private Bitmap imgTap    ;   //タップ
private Bitmap imgClear  ;   //クリア

Resources resources ;
Bitmap image ;
Paint paint ;
Activity act  ;

//コンストラクタ
public PuzzleView( Activity activity )
{
super( activity ) ;

//イメージの読み込み
resources = getResources();
image = BitmapFactory.decodeResource( resources, R.drawable.bg ) ;

DisplayMetrics dm = new DisplayMetrics() ;
activity.getWindowManager().getDefaultDisplay().getMetrics( dm ) ;
int winW = dm.widthPixels ;
int winH = dm.heightPixels ;
System.out.println( "winW = " + winW ) ;
System.out.println( "winH = " + winH ) ;
}

// 画像のサイズを取得するメソッド
public String getSize( Context context , int resource_name )
{
// リソースからbitmapを作成
Bitmap image = BitmapFactory.decodeResource( context.getResources() , resource_name ) ;

// 画像サイズ取得
int width  = image.getWidth() ;
int height = image.getHeight() ;

System.out.println( "Image_W = " + width ) ;
System.out.println( "Image_H = " + height ) ;

// 画像サイズの文字列を返す
String size = "w:" + width + ",h:" + height;
System.out.println( "Size = " + size ) ;

return size;
}

protected void onDraw( Canvas canvas )
{
super.onDraw( canvas ) ;
canvas.drawBitmap( image , 0 , 0 , paint ) ;
}
}
}


02-28 04:43:25.438 1199-1199/? I/art: Not late-enabling -Xcheck:jni (already on)
02-28 04:43:25.440 1199-1199/? W/art: Unexpected CPU variant for X86 using defaults: x86_64
02-28 04:43:25.617 1199-1199/net.npaka.puzzlegame W/System: ClassLoader referenced unknown path: /data/app/net.npaka.puzzlegame-2/lib/x86_64
02-28 04:43:25.914 1199-1199/net.npaka.puzzlegame I/System.out: winW = 1080
02-28 04:43:25.914 1199-1199/net.npaka.puzzlegame I/System.out: winH = 1794
02-28 04:43:27.654 1199-1247/net.npaka.puzzlegame I/OpenGLRenderer: Initialized EGL, version 1.4
02-28 04:43:27.654 1199-1247/net.npaka.puzzlegame D/OpenGLRenderer: Swap behavior 1
02-28 04:43:27.878 1199-1247/net.npaka.puzzlegame E/EGL_emulation: tid 1247: eglSurfaceAttrib(1178): error 0x3009 (EGL_BAD_MATCH)
02-28 04:43:27.878 1199-1247/net.npaka.puzzlegame W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x79c038e0da80, error=EGL_BAD_MATCH

02-28 04:46:22.056 1199-1204/net.npaka.puzzlegame W/art: Suspending all threads took: 9.719ms

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

コードが分かりにくいです
というか、本人が混乱状態にあるのでは
このコードを見てそう思います

ディスプレイサイズ、画像のサイズは表示

ログに出ています
System.out: winW = 1080
System.out: winH = 1794

// 画像のサイズを取得するメソッド
public String getSize( Context context , int resource_name ) 

これは呼ばれている箇所が無いので
画像のサイズは出てこないのは当然

あるいはどこかで呼んでいるのかな?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/28 23:11

    yonaさん、回答有難う御座います。
    # public String getSize( Context context , int resource_name )
      ・・・メソッドの中の
      
      System.out.println( "Image_W = " + width ) ;
    System.out.println( "Image_H = " + height ) ;
      ・・・・・・
    System.out.println( "Size = " + size ) ;

    がアウトプットされた箇所がありません。

    一体何が原因でしょうか、宜しくお願いします。
    -----------------------------------------------------------------------
    public String getSize( Context context , int resource_name )
    {
    // リソースからbitmapを作成
    Bitmap image = BitmapFactory.decodeResource( context.getResources() , resource_name ) ;

    // 画像サイズ取得
    int width = image.getWidth() ;
    int height = image.getHeight() ;

    System.out.println( "Image_W = " + width ) ;
    System.out.println( "Image_H = " + height ) ;

    // 画像サイズの文字列を返す
    String size = "w:" + width + ",h:" + height;

    System.out.println( "Size = " + size ) ;

    return size;
    }
    ------------------------------------------------------------

    キャンセル

  • 2017/02/28 23:49

    質問するときに
    ちゃんと説明を読みましょう

    ###該当のソースコード
    ```ここに言語を入力
    ここにご自身が実行したソースコードを書いてください
    ```

    例えば
    ```Java

    import android.app.Activity;
    ...
    ```
    と書けばよかったですね
    このコメントでは使えませんので最初の質問欄です

    それから、クラスは分けて分かりやすいようにしてください
    何より、自分自身が理解しやすいはずです

    >一体何が原因でしょうか、宜しくお願いします。

    >これは呼ばれている箇所が無いので
    とお答えしたのですが...

    どこにも使われていないということです
    メソッドの使い方が分からない?でしょうか?

    それにこの命名は良くありません
    APIでgetSize(Point outSize)というのがありますから他の人が見ると間違えるかもしれません
    https://developer.android.com/reference/android/view/Display.html#getSize(android.graphics.Point)

    キャンセル

0

このコードはどこまで動いていたんでしょうか?

とりあえずsetContentViewを削除して動かしてください。

また、コードはコード用の記述に修正してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/28 22:31

    yonaさん、回答有難う御座います。

    >とりあえずsetContentViewを削除して動かしてください。
    #setContentViewを削除しました。

    >また、コードはコード用の記述に修正してください。
    #「コード用の記述」の意味が不明ですが、修正後のコードを掲載します。

    --------------------------------------------------------------------------------
    import android.app.Activity;
    import android.content.Context;
    import android.content.res.Resources;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;

    //スライドパズル
    public class PuzzleGame extends Activity
    {
    //アクティビティ起動時に呼ばれる
    @Override
    public void onCreate( Bundle bundle )
    {
    super.onCreate( bundle ) ;
    Util.setActivity( this ) ;

    //フルスクリーンの指定
    getWindow().clearFlags( WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN ) ;
    getWindow().addFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN ) ;
    requestWindowFeature( Window.FEATURE_NO_TITLE ) ;

    //ビューの追加
    // setContentView( new PuzzleView( this ) ) ;
    }

    class PuzzleView extends View
    {
    //イメージ
    private Bitmap imgBg ; //背景

    Resources resources ;
    Bitmap image ;
    Paint paint ;
    Activity act ;

    //コンストラクタ
    public PuzzleView( Activity activity )
    {
    super( activity ) ;

    //イメージの読み込み
    resources = getResources();
    image = BitmapFactory.decodeResource( resources, R.drawable.bg ) ;

    DisplayMetrics dm = new DisplayMetrics() ;
    activity.getWindowManager().getDefaultDisplay().getMetrics( dm ) ;
    int winW = dm.widthPixels ;
    int winH = dm.heightPixels ;
    System.out.println( "winW = " + winW ) ;
    System.out.println( "winH = " + winH ) ;
    }

    // 画像のサイズを取得するメソッド
    public String getSize( Context context , int resource_name )
    {
    // リソースからbitmapを作成
    Bitmap image = BitmapFactory.decodeResource( context.getResources() , resource_name ) ;

    // 画像サイズ取得
    int width = image.getWidth() ;
    int height = image.getHeight() ;

    System.out.println( "Image_W = " + width ) ;
    System.out.println( "Image_H = " + height ) ;

    // 画像サイズの文字列を返す
    String size = "w:" + width + ",h:" + height;

    System.out.println( "Size = " + size ) ;

    return size;
    }

    protected void onDraw( Canvas canvas )
    {
    super.onDraw( canvas ) ;
    canvas.drawBitmap( image , 0 , 0 , paint ) ;
    }
    }
    }

    ----------------------------------------------------------
    02-28 06:43:17.808 8722-8722/? I/art: Not late-enabling -Xcheck:jni (already on)
    02-28 06:43:17.809 8722-8722/? W/art: Unexpected CPU variant for X86 using defaults: x86_64
    02-28 06:43:18.042 8722-8722/net.npaka.puzzlegame W/System: ClassLoader referenced unknown path: /data/app/net.npaka.puzzlegame-1/lib/x86_64
    02-28 06:43:19.878 8722-8761/net.npaka.puzzlegame I/OpenGLRenderer: Initialized EGL, version 1.4
    02-28 06:43:19.878 8722-8761/net.npaka.puzzlegame D/OpenGLRenderer: Swap behavior 1
    02-28 06:43:20.137 8722-8761/net.npaka.puzzlegame E/EGL_emulation: tid 8761: eglSurfaceAttrib(1178): error 0x3009 (EGL_BAD_MATCH)
    02-28 06:43:20.138 8722-8761/net.npaka.puzzlegame W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x79c038e0d880, error=EGL_BAD_MATCH
    ----------------------------------------------------------------------

    キャンセル

  • 2017/02/28 22:34

    yonaさん、回答有難う御座います。

    >とりあえずsetContentViewを削除して動かしてください。
    #コードのエラーはありませんが、イメージが表示されなくなりました。

    キャンセル

  • 2017/02/28 23:43

    他の質問のコードを見てください、表示が違いますよね?ヘルプを見てから編集を行なってください。
    また、アプリが強制終了するのか、何も起きないのでは大きく意味が違います、どちらですか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る