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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Android

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

Q&A

解決済

1回答

1230閲覧

別ファイルに記述したカスタムビューと思われるもののデザインをあるファイルから変更する方法がわからないです

ko20vonobird

総合スコア50

Java

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

Android

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

0グッド

0クリップ

投稿2017/04/15 10:09

###前提・実現したいこと
あるファイルにViewを継承したクラスで記述したデザインを表すためのファイルとメインの色々な動作をさせるために作ったActivityを継承したクラスで記述したファイルがあり、さらに追加でデザインを記述したxmlファイルがあります。
その前提で、メインのファイルからデザインを変化させたいのです。具体的には色や図形を追加したりするということです。
詳しいコードを下記でご覧ください。
※エラーとかの問題はまだなく、方法が知りたいです。

###該当のソースコード
デザインのJavaファイル

Java

1 2import android.content.Context; 3import android.graphics.Canvas; 4import android.graphics.Color; 5import android.graphics.Paint; 6import android.graphics.Path; 7import android.graphics.RectF; 8import android.util.AttributeSet; 9import android.util.Log; 10import android.view.View; 11 12public class Designgame extends View { 13 private Paint p = new Paint(); 14 private Paint p2 = new Paint(); 15 private float ox; 16 private float oy; 17 private float dl; 18 private float dl2; 19 private float dl3; 20 private float dl4; 21 private float dl5; 22 private float dl6; 23 private float c1x; 24 private float c1y; 25 private float c1r; 26 private float c2x; 27 private float c2y; 28 private float c2r; 29 private float c3x; 30 private float c3y; 31 private float c3r; 32 private float c4x; 33 private float c4y; 34 private float c4r; 35 private float ax; 36 private float ay; 37 private float bx; 38 private float by; 39 private float cx; 40 private float cy; 41 private float dx; 42 private float dy; 43 private float ex; 44 private float ey; 45 private float fx; 46 private float fy; 47 private float gx; 48 private float gy; 49 private float hx; 50 private float hy; 51 private float axa; 52 private float axb; 53 private float axc; 54 private float axd; 55 private float axe; 56 private float axf; 57 private float axg; 58 private float axh; 59 private float axi; 60 private float aya; 61 private float ayb; 62 private float ayc; 63 private float cxa; 64 private float cxb; 65 private float cxc; 66 private float cxd; 67 private float cxe; 68 private float cxf; 69 private float cxg; 70 private float cxh; 71 private float cxi; 72 private float cya; 73 private float cyb; 74 private float cyc; 75 private float zax; 76 private float zay; 77 private float zbx; 78 private float zby; 79 private float alpha; 80 private float beta; 81 private float c3a; 82 private float c3b; 83 private float c3c; 84 private float c4a; 85 private float c4b; 86 private float c4c; 87 private float pa1; 88 private float pa2; 89 private float pa3; 90 private float pa4; 91 private float pb1; 92 private float pb2; 93 private float pb3; 94 private float pb4; 95 private float pc1; 96 private float pc2; 97 private float pc3; 98 private float pc4; 99 private float winW; 100 private float winH; 101 102 public float getC1r() { 103 return c1r; 104 } 105 public float getC2r() { 106 return c2r; 107 } 108 public float getC3r() { 109 return c3r; 110 } 111 public float getC4r() { 112 return c4r; 113 } 114 public Designgame(Context context) { 115 super(context, null); 116 } 117 public Designgame(Context context, AttributeSet attrs) { 118 super(context, attrs, R.layout.activity_game); 119 } 120 public Designgame(Context context, AttributeSet attrs, int defStyleAttr) { 121 super(context, attrs, defStyleAttr); 122 } 123 /*public Screen(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 124 super(context, attrs, defStyleAttr, defStyleRes); 125 }*/ 126 protected void onDraw(Canvas c) { 127 super.onDraw(c); 128---省略

xmlファイル

xml

1<?xml version="1.0" encoding="utf-8"?> 2<android.support.percent.PercentFrameLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:gravity="top"> 8 <com.gmail.archerygame.Designgame 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 /> 12 <TextView 13 android:id="@+id/powertext" 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:text="power" 17 app:layout_marginLeftPercent="25%" 18 /> 19 <TextView 20 android:id="@+id/staminatext" 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:text="stamina" 24 app:layout_marginLeftPercent="25%" 25 app:layout_marginTopPercent="10%" 26 /> 27 <TextView 28 android:id="@+id/timer" 29 android:layout_width="10dp" 30 android:layout_height="10dp" 31 android:text="Timer" 32 android:layout_gravity="right" 33 /> 34 35</android.support.percent.PercentFrameLayout>

操作するメインのファイル

java

1public class Game extends Activity { 2 private Screen sc; 3 private TextView textView; 4 private int winW, winH; 5 private int colchk;//=0; 6 private Toast backinfo; 7 private String LR; 8 private Handler time; 9 private Runnable timer; 10 private int tmtimenum; 11 private int hmtimenum; 12 private int utimenum; 13 private float timenum; 14 private String strtimenum; 15 private int baab; 16 // /* 17 private float tx, ty; 18 private int fingnum; 19 private int pid; 20 private TextView textView1; 21 private TextView textView2; 22 private TextView textView3; 23 private TextView textView4; 24 private TextView showpower; 25 private TextView showstamina; 26 // */ 27 private int vb; 28 private int bchk; 29 private int bgo; 30 private double rpower; 31 private double lpower; 32 private int stamina; 33 private float rectxo, rectxh, rectyo, rectyh; 34 private String stringpower; 35 private String stringstamina; 36 private int perpower; 37 private double spower; 38 private double forspower; 39 private int lingling; 40 private int chklnch; 41 private double ldis; 42 private double rdis; 43 private String Ochk; 44 private String Hchk; 45 private int fpaddinglpower; 46 private int fpaddinglstamina; 47 private int fpaddingbpower; 48 private int fpaddingbstamina; 49 @Override 50 protected void onCreate(Bundle savedInstanceState) { 51 super.onCreate(savedInstanceState); 52 Intent i4 = getIntent(); 53 LR = i4.getStringExtra("LR"); 54 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 55 //setContentView(R.layout.activity_main); 56 //ステータスバー非表示 57 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 58 //タイトルバー非表示 59 requestWindowFeature(Window.FEATURE_NO_TITLE); 60 setNavigationbarHide(this, true); 61 Random rnd = new Random(); 62 WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); 63 Display dp = wm.getDefaultDisplay(); 64 Point po = new Point(); 65 dp.getSize(po); 66 winW = po.x; 67 winH = po.y; 68 perpower = 20; 69 spower = rnd.nextInt(perpower); 70 forspower = 1000 * (1 / spower); 71 rpower = winW - ((winW * 0.05) + (winW * spower));//右(利き)基準 72 lpower = (winW * 0.25) - (winW * spower);//左(利き)基準 73 stamina = 10 + rnd.nextInt(30);//時間耐久度 74 } 75 public void onResume() { 76 super.onResume(); 77 sc = new Screen(this); 78 tmtimenum = 0; 79 hmtimenum = 0; 80 utimenum = 0; 81 vb = 0;//バイブレーション制御用 82 bchk = 0;//球発射準備 83 bgo = 0;//球発射指示 84 Ochk = ""; 85 Hchk = ""; 86 /*WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); 87 Display dp = wm.getDefaultDisplay(); 88 Point po = new Point(); 89 dp.getSize(po); 90 winW = po.x; 91 winH = po.y;*/ 92 parts(); 93 } 94 public void parts() { 95 96 97 fpaddinglpower = (int)(winW * 0.25); 98 fpaddinglstamina = (int)(winW * 0.25); 99 //一時的 100 /*FrameLayout fl = new FrameLayout(this); 101 this.setContentView(fl); 102 fl.addView(sc); 103 setContentView(R.layout.activity_game);*/ 104 LayoutInflater factory = LayoutInflater.from(this); 105 View view = factory.inflate(R.layout.activity_game, null); 106 setContentView(view); 107---省略

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

あるファイルにViewを継承したクラスで記述したデザインを表すためのファイル

カスタムViewクラスのことですね。

メインの色々な動作をさせるために作ったActivityを継承したクラスで記述したファイル

カスタムViewを使用するActivityを継承したクラスですね。

さらに追加でデザインを記述したxmlファイルがあります。

Activityに使用するレイアウトファイルですね。

1-カスタムViewに「色」を設定するメソッドと「追加する図形」の情報(形や色など)を設定するメソッドを定義してください。
2-デザインを変化したいタイミングで1で作成したメソッドを使用してください。このときメソッドを使用するクラスはActivityまたはカスタムViewのどちらかです。

投稿2017/04/15 11:53

編集2017/04/15 11:53
yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ko20vonobird

2017/04/15 12:40

補足ありがとうございます。 カスタムViewクラスの中に取り敢えず色を設定するメソッドだけ設定しようと調べて以下の記述を施しました。 カスタムViewのファイルに、 public void changeColor(){ findViewById(R.id.sousa).setBackgroundColor(Color.argb(255, 0, 255, 0)); } と、バックグラウンドカラーしか出てこなかったのでこう書きました。 一方でActivityを継承したクラスの中に、 Designgame dsgm = (Designgame)findViewById(R.id.sousa); dsgm.changeColor(); と書きました。 エラーは無かったのですが、色が変わらなかったです。何が違うか教えてください。
yona

2017/04/15 12:52

sousaとか突然言われてもわからないです。 あなたが質問に書いた内容しか回答者にはわからないことをまず理解してください。 DesigngameのonDrawで見た目を変更しているんですよね?Canvas#setColor等で変更する必要があります。 そのためsetColorに渡す値を変更するメソッドを作らないといけません。
ko20vonobird

2017/04/15 13:09

気を付けます。 sousaはxmlでカスタムビューに付けたidです。 その通りです、onDrawに見た目を託しています。 ということは、例えば Canvas.setColor(Color.argb(255, Red, Green, Blue)); とRed,Green,Blueという変数を作って それらをメソッドで変更すれば良いのですか?
yona

2017/04/15 13:28

そのとおりです。 onDraw内で描画を変えるときに使用するフィールド変数を変更するメソッドを作成しないといけません。
ko20vonobird

2017/04/15 13:52

色の変更について理解できました。 ただ、図形を新たに導入(描画)する、ということの方法がよくわからないです。新しい図形はどうしたらActivityを継承したクラス(のファイル)から操作できるのでしょうか?
yona

2017/04/15 14:02

Canvas#drawRect等の図形を描くメソッドに使われる情報を設定するメソッドを作ってください。
ko20vonobird

2017/04/15 14:12

その情報というのは例えばdrawCircleの座標とか半径などの数値ですよね? それを設定するメソッドを作ってどう変える仕組みがあるのでしょうか?
ko20vonobird

2017/04/15 14:33

思いついた方法としては、あらかじめ画面外の座標にて図形を作っておき、そのメソッドで座標を色の時のように変えるというものなのですが、これはどうなのでしょうか?
yona

2017/04/15 14:38

必要な情報をフィールド変数で保持してください。
ko20vonobird

2017/04/15 14:44

必要に応じて変数の値を変えて図形を表現する、のような解釈で良いですか?
yona

2017/04/15 15:00

はい、ただそのまま値だけを使うのはオブジェクト指向的ではないのでクラスを定義してください。
ko20vonobird

2017/04/15 15:09

クラス、、ですか、どういったクラスをどこに定義すれば良いのですか?
yona

2017/04/15 15:40

それは自分で考えましょう。 なんとなく掴めてるはずですよね。
ko20vonobird

2017/04/15 15:56

クラスを定義する場所はJavaファイルの中の既存クラスの中あるいは外で、その役割はその値を動かすのとモノであるカスタムビューをリンクさせて一つの設計図のようにするといったところでしょうか。クラスの中でそれカスタムビューのための値のためのコンストラクタなどを用意してそれを一つの設計図として扱うといったのが私の考えです。間違ってたらご指摘下さい。 ありがとうございました。
yona

2017/04/16 01:41

新しいトップレベルクラスとしてていぎしたほうがいいです。
ko20vonobird

2017/04/16 02:40

そうなんですか、わかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問