Sam*_*mir 8 android android-custom-view android-layout
我试图使一个相对布局限制在一个圆圈内,即相对布局应该像下图所示的方形.
我试图将布局的宽度和高度设置为:
?((diameter)²/2) 大约70%
一圈内的正方形http://www.yogaflavoredlife.com/wp-content/uploads/2010/09/square-circle.gif
public class SquareLayout extends RelativeLayout {
public SquareLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int originalWidth = MeasureSpec.getSize(widthMeasureSpec);
int originalHeight = MeasureSpec.getSize(heightMeasureSpec);
int required = Math.min(originalWidth, originalHeight) * 7 / 10;
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(required, required);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的是矩形布局而不是方形布局:

任何人都可以指导我哪里出错了吗?
样品用法:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.widget.SquareLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F55C5C">
</com.example.widget.SquareLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这是我得到解决方案的方法。首先,我创建了一个方形框架来容纳所有布局。
public class SquareFrame extends FrameLayout {
public SquareFrame(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int originalWidth = MeasureSpec.getSize(widthMeasureSpec);
int originalHeight = MeasureSpec.getSize(heightMeasureSpec);
int required = Math.min(originalWidth, originalHeight);
super.onMeasure(
MeasureSpec.makeMeasureSpec(required, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(required, MeasureSpec.EXACTLY));
}
}
Run Code Online (Sandbox Code Playgroud)
然后将所有布局插入该方框内。
<com.example.widget.SquareFrame
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#5CF5FC">
<com.example.widget.SquareLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F55C5C">
</com.example.widget.SquareLayout>
</com.example.widget.SquareFrame>
Run Code Online (Sandbox Code Playgroud)
这是我得到的
正方形,而不是长方形。
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |