fragmentTabHostを利用しており、タブを表示させることはできたのですが、そのフラグメントのxmlファイル内で独自ビューを作りviewを継承したクラスでcanvasを利用したのですが、一切表示されません。いろいろ試したところどうやらそもそもviewを継承したクラスが一切呼び出されてないようなのです。
以下ソースコードです
MainActivity内のgoal()メソッドが呼び出されたらタブが追加されるようにしました。
それだけだとonCreate()の時点でエラーが起こるので何もないタブを2つ最初に入れておいてそれは見えないようにしておきました。
それ以外のコードは省略します。
###MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
Log.d("debug", "debug1");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mode=MODE_CREATE1;
//textSetting = (TextView) findViewById(R.id.textView);
FragmentTabHost host = (FragmentTabHost) findViewById(android.R.id.tabhost);
host.setup(this, getSupportFragmentManager(), R.id.content);
tab1 = host.newTabSpec("Player1").setIndicator("Player1");
tab2 = host.newTabSpec("Player2").setIndicator("Player2");
host.addTab(tab1, kariAnswer.class, null);
host.addTab(tab2, kariAnswer.class, null);
host.getTabWidget().getChildAt(0).setVisibility(View.GONE);
host.getTabWidget().getChildAt(1).setVisibility(View.GONE);
}
private void goal(){
FragmentTabHost host = (FragmentTabHost) findViewById(android.R.id.tabhost);
host.setup(this, getSupportFragmentManager(), R.id.content);
tab1 = host.newTabSpec("Player1").setIndicator("Player1"); Bundle bundle_p1 = new Bundle(); bundle_p1.putSerializable("lines_yoko", this.line_yoko_state); bundle_p1.putSerializable("lines_tate", this.line_tate_state); bundle_p1.putSerializable("floors", this.floor_state); bundle_p1.putInt("chara_i", chara1_i); bundle_p1.putInt("chara_j", chara1_j); host.addTab(tab1, Answer.class, bundle_p1); tab2 = host.newTabSpec("Player2").setIndicator("Player2"); Bundle bundle_p2 = new Bundle(); bundle_p2.putSerializable("lines_yoko", this.line_yoko_state_P2); bundle_p2.putSerializable("lines_tate", this.line_tate_state_P2); bundle_p2.putSerializable("floors", this.floor_state_P2); bundle_p2.putInt("chara_i", chara2_i); bundle_p2.putInt("chara_j", chara2_j); host.addTab(tab2, Answer.class, bundle_p2); }
###Answer.java
private Answer_view answer_view;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = getActivity(); View rootView = inflater.inflate(R.layout.fragment_main, container,false); Bundle b = getArguments(); this.answer_view =(Answer_view)rootView.findViewById(R.id.Answer_view); answer_view.context=context; answer_view.line_yoko_state =(int[][]) b.getSerializable("lines_yoko"); Log.d("answer",Integer.toString(answer_view.line_yoko_state[0][0])); answer_view. line_tate_state = (int[][]) b.getSerializable("lines_tate"); answer_view.floor_state = (int[][]) b.getSerializable("floors"); answer_view.chara_i = b.getInt("chara_i"); answer_view.chara_j = b.getInt("chara_j"); answer_view.character = new Character(answer_view.chara_i, answer_view.chara_j, context); answer_view.invalidate(); return rootView; }
###Answer_view.java
package com.example.sonekenichiro.game1;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import java.net.ContentHandler;
public class Answer_view extends View {
Line line[][] = new Line[6][5];
public int line_yoko_state[][];
Line_tate line_tate[][] = new Line_tate[5][6]; public int line_tate_state[][]; Floor floor[][] = new Floor[6][6]; public int[][] floor_state; public Character character; int chara_i; int chara_j; Context context; public static final int Line_NASHI =0; public static final int Line_KABE =1; public static final int Line_HAKKEN =2; public static final int MODE_BATTLE=1; public Answer_view(Context context,AttributeSet attrs){ super(context,attrs); } public void onDraw(Canvas c){ for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { floor[i][j] = new Floor(24 + i * 174, 60.5f + j * 214,context); } } for (int i = 0; i < 6; i++) { for (int j = 0; j < 5; j++) { Log.d("answer_view", Integer.toString(line_yoko_state[i][j])); line[i][j] = new Line(24 + i * 173, 272 + j * 214,1); if(line_yoko_state[i][j]==Line_KABE){ line_yoko_state[i][j]=Line_HAKKEN; } } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { line_tate[i][j] = new Line_tate(195 + i * 174, 58 + j * 214,1); if(line_tate_state[i][j]==Line_KABE){ line_tate_state[i][j]=Line_HAKKEN; } } } Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.BLACK); paint.setStrokeWidth(16); paint.setStyle(Paint.Style.STROKE); c.drawRect(16, 52, 1068, 1350, paint); for (int i = 0; i < 6; i++) { for (int j = 0; j < 5; j++) { line[i][j].onDraw(c, line_yoko_state[i][j]); } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { line_tate[i][j].onDraw(c,line_tate_state[i][j]); } } for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { floor[i][j].onDraw(c,floor_state[i][j]); } } character.onDraw(c); } }
###fragment_main
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
</RelativeLayout><view android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Answer_view" class="com.example.sonekenichiro.game1.Answer_view"/>
どうしたらキャンバスクラスが使えるようになるでしょうか。
あなたの回答
tips
プレビュー