更改视图大小以匹配内容

时间:2015-10-29 08:42:11

标签: android android-layout view

我有一个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秒然后它消失了。知道什么可以触发吗?

2 个答案:

答案 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()