質問編集履歴

1 項目名の修正、コードの追加

ko20vonobird

ko20vonobird score 50

2017/01/22 21:57  投稿

内包されているクラスから、外側のクラスのある定数の値を使いたいです
###実現したいこと
タイトルの通りなのですが、アクティビティを継承しているクラスの中にビューを継承しているクラスがあり、そのクラスから外側のクラスで測った画面の幅の定数を取得したいのです。
###発生している問題・エラーメッセージ
###発生している問題
なぜか値が0になります。また、下記の試したことで書いたようにインスタンスを作成してインスタンス.定数;としてみたのですが、うまくいきませんでした。
###該当のソースコード
```Java
全文
```java
package com.gmail.archerygame;
//import ゾーン
public class Main extends Activity {
private int winWM, winHM;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void onResume() {
super.onResume();
parts();
}
public void parts() {
WindowManager wmM = (WindowManager)getSystemService(WINDOW_SERVICE);
   //コンストラクタ的ゾーン
   private TextView title;
   private int winWM, winHM;
   private int winWMl, winHMl;
   private int a, r, g, b, cnt;
   private int sw = 0;
   private double kaku;
   private float titley;
   private float titleh;
   private int deltay;
   private double rad;
   private Handler mHandler;
   private Runnable titleloop;
   private Handler stHandler = new Handler();
   private Runnable st;
   private Handler cbHandler;
   private Runnable circlebreaking;
   private Handler cbrunHandler = new Handler();
   private Runnable circlemake;
   Ct cta;
   float s = 37.0f;
   public int getWinWM(){//##########
       return winWM;
   }
   public int getWinHM(){//##########
       return winHM;
   }
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
       //setContentView(R.layout.activity_main);
       //ステータスバー非表示
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
       //タイトルバー非表示
       requestWindowFeature(Window.FEATURE_NO_TITLE);
   }
   public void onResume() {
       super.onResume();
       if (mHandler != null){
           mHandler.postDelayed(titleloop, 1000);
       }
       if (stHandler != null){
           stHandler.postDelayed(st, 1000);
       }
       if (cbHandler != null){
           cbHandler.postDelayed(circlebreaking, 1000);
       }
       if (cbrunHandler != null){
           cbrunHandler.postDelayed(circlemake, 1000);
       }
       cta = new Ct(this);
       parts();
   }
   public void parts() {
       WindowManager wmM = (WindowManager)getSystemService(WINDOW_SERVICE);
       Display dpM = wmM.getDefaultDisplay();
       Point poM = new Point();
       dpM.getSize(poM);
       final int winWM = poM.x;
       final int winHM = poM.y;
       winWM = poM.x;
       winHM = poM.y;
       FrameLayout fl = new FrameLayout(this);
       this.setContentView(fl);
       fl.addView(cta);
       final LinearLayout ll = new LinearLayout(this);
       ll.setOrientation(LinearLayout.VERTICAL);
       fl.addView(ll);
       title = new TextView(this);
       title.setText("N!ce・Sl!ngshot");
       title.setTextSize(17.0f);
       title.setTypeface(Typeface.SERIF);
       float titlewidth = title.getCompoundPaddingLeft() + title.getCompoundPaddingRight() + Layout.getDesiredWidth(title.getText(),title.getPaint());
       float titlemiddle = titlewidth;
       int titlewhere = (int)((winWM / 2) - (titlemiddle / 2));
       float titlewheref = (float)titlewhere;
       title.setTranslationX(titlewheref);
       ll.addView(title);
       title.setVisibility(View.GONE);
       st = new Runnable() {
           @Override
           public void run() {
               stHandler.removeCallbacks(st);
               looper();
           }
       };
       stHandler.postDelayed(st, 3000);
   }
   public void looper() {
       WindowManager wmMl = (WindowManager)getSystemService(WINDOW_SERVICE);
       Display dpMl = wmMl.getDefaultDisplay();
       Point poMl = new Point();
       dpMl.getSize(poMl);
       final int winWMl = poMl.x;
       final int winHMl = poMl.y;
       mHandler = new Handler();
       a = 35;
       r = 0;
       g = 0;
       b = 0;
       cnt = 0;
       kaku = 0;
       titley = winWMl - titleh;
       titleloop = new Runnable() {
           @Override
           public void run() {
               title.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
               titleh = title.getCompoundPaddingTop() + title.getCompoundPaddingBottom() + title.getMeasuredHeight();
               float titlewidthcb = title.getCompoundPaddingLeft() + title.getCompoundPaddingRight() + Layout.getDesiredWidth(title.getText(),title.getPaint());
               float titlewherecb = (winWMl / 2) - (titlewidthcb / 2);
               title.setTranslationX(titlewherecb);
               title.setTranslationY(titley);
               title.setTypeface(Typeface.SERIF);
               switch(title.getVisibility()){
                   case View.VISIBLE:
                       break;
                   case View.GONE:
                       title.setVisibility(View.VISIBLE);
                       break;
               }
               s = s + 0.4f;
               kaku = -1 * cnt * 7.2;
               rad = kaku * Math.PI / 180;
               int deltay = (int)(winHMl * Math.sin(rad));
               titley = winHMl + deltay;
               title.setTextSize(s);
               title.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
               titleh = title.getCompoundPaddingTop() + title.getCompoundPaddingBottom() + title.getMeasuredHeight();
               float titlewidthc = title.getCompoundPaddingLeft() + title.getCompoundPaddingRight() + Layout.getDesiredWidth(title.getText(),title.getPaint());
               float titlewherec = (winWMl / 2) - (titlewidthc / 2);
               title.setTranslationX(titlewherec);
               title.setTranslationY(titley);
               if (titley + titleh > winHMl) {
                   titley = winHMl - titleh;
                   title.setTranslationY(titley);
               }
               title.setTypeface(Typeface.SERIF);
               title.setTextColor(Color.argb(a, r, g, b));
               a = a + 4;
               mHandler.postDelayed(titleloop, 15);
               if (s >= 59.0f) {
                   mHandler.removeCallbacks(titleloop);
                   //次のまで数秒のハンドラ作成
                   cbHandler = new Handler();
                   circlebreaking = new Runnable() {
                       @Override
                       public void run() {
                           cb();
                       }
                   };
                   cbHandler.postDelayed(circlebreaking, 1500);
               }
               cnt = cnt + 1;
           }
       };
       mHandler.postDelayed(titleloop, 15);
   }
   public void cb() {
       cbHandler.removeCallbacks(circlebreaking);
       Paint cipa = new Paint();
       circlemake = new Runnable() {
           @Override
           public void run() {
               //円のアニメーション描画
               sw = 1;
               cta.endraw();
               cbrunHandler.removeCallbacks(circlemake);
           }
       };
       cbrunHandler.postDelayed(circlemake, 15);
   }
   public class Ct extends View {
       float gw = getWinWM();//##########
       float gh = getWinHM();//##########
       private float r1 = gw + 20;
       private float cx = gw / 2;
       private float cy = (gh / 2) - (gh / 6);
       public Ct(Context context){
           super(context);
       }
       protected void onDraw(Canvas canvas){
           super.onDraw(canvas);
           Paint pam = new Paint();
           if (sw == 1){
               //ここにすべての処理を書いていく↓
               pam.setColor(Color.argb(255, 0, 0, 0));
               pam.setStyle(Paint.Style.STROKE);
               pam.setStrokeWidth(3);
               canvas.drawCircle(cx, cy, r1, pam);
               //ここにすべての処理を書いていく↑
           }
       }
       public void endraw(){
           invalidate();
       }
   }
   public void onPause() {
       super.onPause();
       if (mHandler != null){
           mHandler.removeCallbacks(titleloop);
       }
       if (stHandler != null){
           stHandler.removeCallbacks(st);
       }
       if (cbHandler != null){
           cbHandler.removeCallbacks(circlebreaking);
       }
       if (cbrunHandler != null) {
           cbrunHandler.removeCallbacks(circlemake);
       }
   }
   public void onDestroy() {
       super.onDestroy();
       if (mHandler != null){
           mHandler.removeCallbacks(titleloop);
       }
       if (stHandler != null){
           stHandler.removeCallbacks(st);
       }
       if (cbHandler != null){
           cbHandler.removeCallbacks(circlebreaking);
       }
       if (cbrunHandler != null){
           cbrunHandler.removeCallbacks(circlemake);
       }
   }
}
public class Ct extends View {
Main ma = new Main();
private float r1 = ma.winWM + 20;
private float cx = winWM / 2;
private float cy = (winHM / 2) - (winHM / 6);
}
}
```
こんな感じです。
問題個所に//##########を付けました。
###試したこと
デバッグして値を確かめたり、外側のクラスのインスタンスを作成してそれを用いて参照できないか試みました。
  • Java

    21914 questions

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

  • Android

    9426 questions

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

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