如何用九个补丁拉伸圆形图像

时间:2014-06-09 16:28:29

标签: android nine-patch

我有一个像圆圈的图像。我想只拉伸它内部的一部分,我不想要它的拉伸边界。 例如,我的图像在下面是相同的

enter image description here

我把它设置为背景我的textview.i想要的是,如果文字很大,它会像圆圈一样伸展,文字放在中心的黑色圆圈里。

1 个答案:

答案 0 :(得分:5)

使用9-patch图像可能无法实现。但是我认为你的要求可以通过使用形状drawables来实现。以下是您可以参考的示例代码:

  1. 在drawable文件夹中创建两个圆形形状(outer_circle.xml和inner_circle.xml)。
  2. 将textview放在LinearLayout中,其中布局背景为外圈,文本背景为内圈。
  3. 以编程方式更新textview的高度,使其与宽度相等。
  4. 以下是代码:

    1. outer_circle.xml
    2. <solid android:color="#ffffff" />
      
      <stroke
          android:width="10dp"
          android:color="#000000" />
      
      <size
          android:height="120dp"
          android:width="120dp" />
      

      2.inner_circle.xml

      <!-- Give the padding so the text does not touches the edge of inner circle -->
      <padding
          android:bottom="5dp"
          android:left="5dp"
          android:right="5dp"
          android:top="5dp" />
      
      <solid android:color="#000000" />
      

      3.Layout Sample

      <LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginLeft="10dp"
          android:layout_marginTop="10dp"
          android:background="@drawable/outer_circle"
          android:gravity="center" >
      
          <TextView
              android:id="@+id/textTest"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:background="@drawable/inner_circle"
              android:gravity="center"
              android:text="Test"
              android:textColor="#aaaaaa"
              android:textStyle="bold" />
      </LinearLayout>
      

      4.以编程方式设置textView布局

      // Override this method to get the text width dynamically and 
      // apply the same height to the textview
      @Override
      public void onWindowFocusChanged(boolean hasFocus) {
      
          super.onWindowFocusChanged(hasFocus);
          TextView tvTest = (TextView) findViewById(R.id.textTest);
          int tvWidth = tvTest.getWidth();
          ViewGroup.LayoutParams tvLayout = tvTest.getLayoutParams();
          tvLayout.height = tvLayout.width = tvWidth;
          tvTest.setLayoutParams(tvLayout);
      
      }
      

      以下是截图

      的一部分

      enter image description here

      或者您可以查看此链接

      How to draw a smaller ShapeDrawable inside another shapeDrawable programmatically

      希望这会有用。