缩放上的奇怪行为或调整自定义视图的大小

时间:2014-06-29 13:06:46

标签: android

我有一个代表多米诺骨牌的自定义视图。我希望用户能够从他的" Hand"中抓取/拖动Domino。 (底部的LinearLayout)到中间。所以DominoView必须从小(手状态)到更大(2.5倍大)的状态调整大小以适应中间位置。

但我很难处理这个调整大小。

所以我开始玩(参见随附的屏幕),并有一个视图问题。

我的第一个方法是构建大版本并使用

进行扩展
dominoView.setScaleX(0.5f)
dominoView.setScaleY(0.5f)

使LinearLayout适合手。但是我遇到了处理视图之间边界的问题,想到onMeasure中的错误或缺少实现。 Look at the bottom

第二种方法是更改​​Views LayoutParameter的高度/宽度,但在这种方法中,背景和textView(重力="中心")不会被重绘,原因是{ {1}}

requestLayout()

Before Sizing After Sizing

那么有人可以给我一个暗示让这个大小调整工作吗?

查看:

            RelativeLayout.LayoutParams params = (LayoutParams)dominoView.getLayoutParams();
            params.height = 200;
            params.width = 100;
            dominoView.setLayoutParams(params);
            dominoView.requestLayout();
            dominoView.invalidate();
            dominoView.forceLayout();

布局:

public class DominoView extends LinearLayout {

    private static final String TAG = DominoView.class.getSimpleName();



    // SETTINGS
    private static final int ROTATION_DURATION = 750;

    private State state = State.HAND;

    private boolean rotating = false;
    private boolean draging = false;
    private TextView[] tvNummbers = new TextView[2];
    private int[] numbers = new int[2];

    private float mtvOriginSize , mOriginHeight, mOriginWidth;

    public interface IRotation {
        public void onRotationEnd();
    }

    public DominoView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);

    }

    public DominoView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public DominoView(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mInflater.inflate(R.layout.domino, this, true);
        tvNummbers[0] = (TextView)findViewById(R.id.domino_tv1);
        tvNummbers[1] = (TextView)findViewById(R.id.domino_tv2);


        fillViews(numbers);
    }


    public void setValues(int[] numbers) {
        Log.i(TAG, "setValues " + numbers[0] + "|" + numbers[1]);
        this.numbers = numbers;
        fillViews(numbers);
    }

    private void fillViews(int[] numbers){
        try {
            tvNummbers[0].setText("" + numbers[0]);
            tvNummbers[1].setText("" + numbers[1]);
        } catch (Exception e) {

        }
    }

    public TextView[] getTextViews(){
        return tvNummbers;
    }
}

感谢您阅读这些家伙!

0 个答案:

没有答案