我有一个代表多米诺骨牌的自定义视图。我希望用户能够从他的" Hand"中抓取/拖动Domino。 (底部的LinearLayout)到中间。所以DominoView必须从小(手状态)到更大(2.5倍大)的状态调整大小以适应中间位置。
但我很难处理这个调整大小。
所以我开始玩(参见随附的屏幕),并有一个视图问题。
我的第一个方法是构建大版本并使用
进行扩展dominoView.setScaleX(0.5f)
dominoView.setScaleY(0.5f)
使LinearLayout适合手。但是我遇到了处理视图之间边界的问题,想到onMeasure中的错误或缺少实现。
第二种方法是更改Views LayoutParameter的高度/宽度,但在这种方法中,背景和textView(重力="中心")不会被重绘,原因是{ {1}}
requestLayout()
那么有人可以给我一个暗示让这个大小调整工作吗?
查看:
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;
}
}
感谢您阅读这些家伙!