根据屏幕尺寸

时间:2016-08-18 09:13:44

标签: android xml android-layout drawable shape

我一直坚持这一点。我是一个新手android开发者。

我有一个可绘制的圆圈。

circular_shape.xml

<?xml version="1.0" encoding="utf-8"?>    
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:useLevel="false"
    android:shape="ring"
    android:thickness="0.8dp">
    <solid android:color="@android:color/holo_blue_dark"/>
</shape>

现在我想在我的活动布局中使用这个圆圈,使其覆盖整个屏幕。也就是说,屏幕的宽度应该等于圆的直径。 请注意,我没有设置圆的半径。

example_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/exampleLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.anil.raceorganizer.ExampleActivity">
    <ImageView
        android:id="@+id/race_field"
        android:src="@drawable/circular_shape"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/darker_gray"
        android:padding="0dp"
        android:layout_margin="0dp"
        ></ImageView>
</FrameLayout>

请注意,我已尝试将填充和边距设为0,但它不起作用。 我也尝试通过代码设置ImageView的大小,但它只改变了ImageView的整体大小而不是单独的圈。

这是我用这段代码得到的。

enter image description here

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring" android:thickness="0.8dp" android:useLevel="false" android:innerRadiusRatio="2.1"> <solid android:color="@android:color/holo_blue_dark" /> </shape>

答案 1 :(得分:1)

使用Canvas,我们可以绘制与屏幕宽度相匹配的形状。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();
    int height = display.getHeight();

    Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);

    Canvas c = new Canvas(bmp);

    RectF rect = new RectF(0,0,width,width);
    drawCircle(rect, c, width, height);

}

private void drawCircle(RectF rect, Canvas c, int width, int height) {
        Paint paint = new Paint();
        paint.setARGB(255, 255 , 10, 21);
        paint.setStrokeWidth(8);
        paint.setAntiAlias(true);
        paint.setStrokeCap(Paint.Cap.BUTT);
        paint.setStyle(Paint.Style.STROKE);
        int radius;
        if(width < height)
            radius = width/2;
        else 
            radius = height/2;

        radius-= 4;
        c.drawCircle(width/2, height/2, radius, paint);
    }

不确定它是否对您有帮助。如果不是,请告诉我。我希望删除而不是获得downvotes!

答案 2 :(得分:0)

试试这个 您可以在drawable中使用此标记

android:innerRadius="150dp"

相应地改变半径

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

使用上面的宽度

<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:useLevel="false"
        android:shape="ring"
        android:innerRadius="150dp"
        android:thickness="0.8dp">
        <solid android:color="@android:color/holo_blue_dark"/>
    </shape>

答案 3 :(得分:0)

使用这种方法获得类似环状的结构。

使用尺寸标签保持1:1的宽高比

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >

<size android:width="50dp"
 android:height="50dp"/>

<stroke android:color="#000" android:width="0.1dp"/>

</shape>