MainActivityでTextViewを継承したPieceクラスを
表示しようとしたのですが、LayoutParams.Marginのところ
でアプリが落ちてしまいます。
MarginLayoutParamsも試したのですが、同じ結果になりました。
どうすれば落ちずに画面を表示できるのかを
ご教授いただければ幸いです。
Pieceクラス
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class Piece extends TextView {
private String pieceName; private int pieceType ; private int pieceWidth; private int pieceHeight; private int posX; private int posY; private int gridSize = 64; private int imgId; RelativeLayout.LayoutParams lp; public Piece(Context c,int type,int x,int y){ super(c); //タイプによって変わる値 pieceType = type; switch(pieceType){ case 0: pieceName = ""; pieceWidth = 1; pieceHeight = 1; imgId = 0; break; case 1: pieceName="父"; pieceHeight=2; pieceWidth=1; imgId=R.drawable.father; break; case 2: pieceName="母"; pieceHeight=2; pieceWidth=1;
imgId=R.drawable.mother;
break;
}
//初期位置
posX = x;
posY = y;
lp = (RelativeLayout.LayoutParams)this.getLayoutParams(); //ここで落ちます。 if(x!=0){ lp.leftMargin = posX * gridSize; } if(y!=0){ lp.topMargin = posY * gridSize; } if(lp!=null){ this.setLayoutParams(lp); } //名前 this.setText(pieceName); this.setBackgroundResource(imgId); //共通のパラメータ this.setGravity(Gravity.RIGHT|Gravity.BOTTOM); this.setTextSize(12); this.setTextColor(Color.BLACK); if(pieceType ==0){ this.setBackgroundColor(Color.GRAY); }else{ this.setBackgroundColor(Color.rgb(255,153,0)); } this.setVisibility(View.VISIBLE); }
}
MainActivityクラス
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.RelativeLayout;
import java.util.Vector;
public class MainActivity extends AppCompatActivity {
private Vector<Piece>p = new Vector<Piece>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout r = new RelativeLayout(this); r.setGravity(Gravity.CENTER); setContentView(r); initialize(); //すべてのViewを追加 for(int i= 0;i<4;i++){ r.addView(p.get(i)); } } private void initialize() { p.add(0,new Piece(this,1,0,0)); p.add(1,new Piece(this,2,3,0)); p.add(10,new Piece(this,0,1,4)); p.add(11,new Piece(this,0,2,4)); }
}
回答1件
あなたの回答
tips
プレビュー