Android アプリ開発 「MATRIX」

Androidアプリの開発に役立つサンプル集



他のクラスの変数を参照して変更する方法

他のクラスの変数を参照して変更する方法

今回は他のクラスにある変数を直接的に参照して変更する方法を説明します。メインの MainActivity.class から 文字を表示しているオリジナルの View クラス(MyView.class)にある変数「yy」を参照して変更します。 

①サンプルコード(MainActivity.class) 

MainActivity.class では、オリジナル View クラス(MyView.class)をインスタンス化し、それを経由して MyView.class の変数にアクセスします。詳細な説明はコード内のコメントを見てください。

public class MainActivity extends AppCompatActivity {

private MyView myView; // MyView クラスをインスタンス化するための箱
private Timer timer; // Timer クラスをインスタンス化するための箱
private Handler handler; // Handler クラスをインスタンス化するための箱

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// MyView クラスをインスタンス化して mView に格納
myView = new MyView(getBaseContext());
// myView を渡して表示する
setContentView(myView);

// MyView UI にアクセスするための Handler インスタンス化して handler に格納
handler = new Handler();

// Timer インスタンス化して timer に格納
timer = new Timer();
// timer にスケジュールを設定すると同時に処理内容を記述
timer.schedule(new TimerTask() {

@Override
public void run() {
// myView クラスの変数 yy 3 を加える
myView.yy += 3;
// UI にアクセスする場合は handler を経由する
handler.post(new Runnable() {
@Override
public void run() {
// myView onDraw 処理を更新する
myView.invalidate();
}
});
}
}, 1000, 1000);
}

}

②サンプルコード(MyView.class) 

参照して変更される変数をもっているクラスです。重要ポイントは参照・変更させたい変数のアクセス修飾子を「public」にすることです。※このクラス内では変数「yy」の値を変更していません。 

public class MyView extends View {

// Paint インスタンス化して paint に格納
private Paint paint = new Paint();
// Y 座標の位置 yy 100f を格納
public float yy = 100f;

public MyView(Context context) {
super(context);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

// paint にテキストサイズ 100f をセット
paint.setTextSize(100f);
// キャンバスに文字を出力する。位置は X=10f, Y=yy。スタイルは paint
canvas.drawText("TEST", 10f, yy, paint);
}

③結果

MainActivity.class から MyView.class の変数「yy」が変更され、一秒ごとに「TEST」という文字が下方に移動します。 

f:id:vw-dsg:20180717005043p:plain

④備考・その他

今回は MyView.class で描画しているので、レイアウトXLMファイルは使用していません。 

END