2016-08-18 134 views
4

它已经有一段时间了,我一直坚持这一点。我是一个新手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> 

请注意,我试图把padding和margin为0,但没有奏效。 我也尝试通过代码设置ImageView的大小,但它只是改变了ImageView的整体大小,而不是单独循环。

这就是我用这段代码得到的结果。

enter image description here

任何帮助是极大的赞赏。

+1

如果你想使用画布绘制图像比XML,我可以给和示例 – Stallion

+1

如果你想我可以告诉你如何用画指南针 – lelloman

+0

@Stallion - 请确实显示 –

回答

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>

+0

我不认为innerradiusratio与屏幕尺寸有任何关系 –

+1

您可以更改屏幕大小来测试我的代码。我保证它会正常工作。 :))。
默认情况下,innerRadiusRatio = 1,这意味着你的circle =你的宽度的1/2。 –

+0

恐怕我无法改变我的客户手机屏幕大小来匹配您的价值_2.1_!这是一个现场项目! –

0

试试这个 您可以绘制

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> 
+0

但我希望它是屏幕的大小。不是150dp。你知道如何动态设置这个半径吗? –

+0

是等一下 –

+0

如何设置半径?这是我的问题1 –

1

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

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); 
    } 

不知道它是否可以帮助你。如果不是,请告诉我。我宁愿删除,也不愿意获得降价!

+0

好吧我不喜欢你的解决方案,你可能会做同样的事情扩展一个Drawable和IMHO它看起来会更好...但我没有勇气来倒叙Rambo – lelloman

+0

@lelloman回答之前我问我是否可以把这个作为答案。根据anil_pulikoden的回复,只有我发布。 – Stallion

+0

它的工作原理。但我不认为我需要一个画布来完成我的活动。格拉西亚斯! –

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> 
+0

我把这段代码。但是圈内没有变化。我的问题是如何将圆直径更改为屏幕宽度。有任何想法吗? –