我有一个GameToken类,它扩展了View。我重写onDraw方法来绘制两个rects。之后我想改变GameToken对象的大小以匹配rects的大小。为了测试,我添加了一个onClickListener,它应该打印出“Test”
layout = (RelativeLayout) findViewById(R.id.layout);
Paint p = new Paint();
GameToken a = new GameToken(0,0, GameToken.Type.ZWEILIEGEND, p, this);
layout.addView(a);
a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("test");
}
});
GameToken课程:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
tSize = canvas.getWidth()/PlayActivity.FIELDSIZE;
paint.setColor(Color.BLACK);
r.set(0, 0, tSize, tSize);
canvas.drawRect(r, paint);
r.set(tSize, 0, 2 * tSize, tSize);
canvas.drawRect(r, paint);
}
到目前为止一切顺利。问题是它总是打印出“测试”,无论我在屏幕上按什么。我想这是因为View,它拥有这两个rects是整个屏幕的大小。 所以我尝试了LayoutParams:
setLayoutParams(new RelativeLayout.LayoutParams(tSize*2, tSize);
这导致rects根本没有出现(我认为它们变得很小)。我尝试了其他一些数字:
setLayoutParams(new RelativeLayout.LayoutParams(600, 600);
这很有效。显示rects,Listener仅在600x600字段中工作。唯一的问题是rects比我想要的小。我的猜测是它们的大小是相对于它们所处视图的大小。
如果我的视图完全正确(tSize * 2,tSize),我将如何填写它?
修改
我想我找到了一个解决方案:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
tSize = canvas.getWidth()/PlayActivity.FIELDSIZE;
setLayoutParams(new RelativeLayout.LayoutParams(2*tSize, tSize));
r.set(0, 0, getWidth()/2, getHeight());
canvas.drawRect(r, paint);
r.set(getWidth()/2, 0, getWidth(), getHeight());
canvas.drawRect(r, paint);
似乎以正确的大小创建rects,而onClick仅在那里工作。 但是,新问题是它只显示大约1秒然后它消失了。知道什么可以触发吗?
答案 0 :(得分:1)
您可以覆盖onMeasure
方法来更改GameTokenView的大小。
答案 1 :(得分:0)
找到解决方案。 我只需要覆盖onMesure(就像mio4kon建议的那样),其大小我想要的是,然后填充视图:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(2 * PlayActivity.tokenSize, 2 * PlayActivity.tokenSize);
}
@Override
protected void onDraw(Canvas canvas) {
paint.setColor(Color.parseColor(color));
r.set(Token.BORDER, Token.BORDER, getWidth() / 2 - Token.BORDER, getHeight()/2 - Token.BORDER);
canvas.drawRect(r, paint);
r.set(getWidth() / 2 + Token.BORDER, Token.BORDER, getWidth() - Token.BORDER, getHeight()/2 - Token.BORDER);
canvas.drawRect(r, paint);
第一个r.set将视图形式0填充到getWidth()/ 2,第二个从getWidth()/ 2填充到getWidth()