2013-08-06 17 views
14

私は、矩形の左右の辺(角ではありません)を湾曲させたいと思います。または、楕円形の上辺と下辺を真っ直ぐにします。2つのカーブした辺をXML矩形で作成するにはどうすればよいですか?

どうすればこのようにすることができますか?

enter image description here

+0

ような形状を使用する方法です。この一定の高さと幅のですか? –

+0

@TedHoppは必ずしもそうではありません –

+0

私は3つの要素、すなわち左右の2つの円と中央の矩形のレイヤーリストのドロウアブルで遊んでみたいと思います。私はそれを適切に拡大する方法を知りません。また、私は以前の質問を言い換えることができます:これは_known_身長ですか? (デバイスの構成によって異なる高さのリソースにバインドされているとわかっているが、固定されていない可能性があります) –

答えて

0

高さの半分に国境半径を設定してみてください。 CSSでは、border-radius:50%は楕円を作成するので、高さのわずか50%であれば、そのようなものが得られるはずです。

0

簡単な方法は、9-patch image(image.9.pngで終わるpng画像)を使用し、画像の拡大縮小方法を定義する余分なピクセルの枠線を使用しています。

もう1つの方法は、res/drawableフォルダにシェイプファイルを作成することです。

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

形状here

+0

丸みを帯びた端を維持するように垂直に伸びる9パッチをどのように定義しようとしていますか?また、私は楕円形が上下に平らになるとは思わない。それは、ボックスに満ちているメジャーとマイナーの直径を持つ楕円になります。OPは明示的に望ましくないと言いました。 –

1

についての詳細は、私は最高のアイデアの一つは、XML金融商品取引法を使用して形状を作成することだと思います。

作成Drawable-> ovalshape.xml

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

    <solid android:color="#ff0000" /> 

    <corners 
     android:bottomLeftRadius="8dp" 
     android:bottomRightRadius="8dp" 
     android:topLeftRadius="8dp" 
     android:topRightRadius="8dp" /> 

    <padding 
     android:bottom="5dip" 
     android:left="10dip" 
     android:right="10dip" 
     android:top="5dip" /> 

</shape> 

今、あなたはこのxml instead of image easily.Iが、これはyou and new SO userのために有用であると考えるに使用することができます。

+0

これは、左右のエッジ全体ではなく、コーナーをカーブしています。 –

9

複数の数字のために、それは自動的にあなたが上記示した形状に展開されますが、あなたは厳密な形状の上にしたい場合は、単に左右

に大きなパディングを与え、単一の文字のために、それは円が表示されます、のTextViewでこれを試してみてください
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <padding 
     android:top="3dp" 
     android:left="8dp" 
     android:right="8dp" 
     android:bottom="3dp"/> 

    <solid android:color="#E6121A" /> 

    <corners 
     android:bottomLeftRadius="12dp" 
     android:bottomRightRadius="12dp" 
     android:topLeftRadius="12dp" 
     android:topRightRadius="12dp" /> 

</shape> 
5

私はちょっと遅く到着しましたが、回答は完全に完了してはいけません(私は柔軟な高さは考慮しません)。しかし、少なくとも、dpの高さを事前に知っていれば、そのトリックは半径をボタンの高さ高さは48dpになり場合例えば、我々のような何かを行うことができます:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#ff0000"/> 
    <corners android:radius="24dp" /> 
</shape> 
+0

ベストアンサー。高さが高い場合は、半径を大きくするだけです。 – IlyaEremin

0

あなたが持っているためにそれを使用できるような形状で許容される最大半径は、形状のベローズの総高さの半分であると思われます希望の比率を維持する柔軟な高さを持つ形状:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <solid android:color="#ffffff" /> 
    <size android:height="@dimen/height" /> 
    <corners 
     android:radius="@dimen/height" 
     /> 
</shape> 
0

高さを定義し、半径を高さの半分にします。

0

うまくいきました。

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

    <solid 
     android:color="@color/color_red"/> 
    <corners 
     android:radius="10000dp" /> 
</shape> 
0

あなたは、私が終了し、常に任意の高さと曲線美滞在200dpと側面を作るためのTextViewの背景

<solid android:color="#E6121A" /> 

<corners 
    android:bottomLeftRadius="12dp" 
    android:bottomRightRadius="12dp" 
    android:topLeftRadius="12dp" 
    android:topRightRadius="12dp" /> 

0

に描画可能に設定するには、半径の大きさを増やすことができます以下のようにプログラムで図形を作成する必要があります(Kotlinのコード)

class CurvedSidesShape : RectShape() { 
    override fun draw(canvas: Canvas, paint: Paint?) { 
     var path = Path() 
     path.addRoundRect(rect(), rect().height(), rect().height(), Path.Direction.CW) 
     canvas.drawPath(path, paint) 
    } 
} 

、ここでは、私は、ボタンの背景

class CurvedSidesButton : Button { 
    private var mHeight: Int = 0 

    constructor(context: Context?) : super(context) { 
     init(context, null, 0, 0) 
    } 

    . 
    . 
    . 

    override fun draw(canvas: Canvas?) { 
     setCurvedSidesBackground(height) 
     super.draw(canvas) 
    } 

    private fun setCurvedSidesBackground(height: Int) { 
     if (height != mHeight) { 
      val curvedSidesShape = ShapeDrawable(CurvedSidesShape()) 
      curvedSidesShape.intrinsicWidth = width 
      curvedSidesShape.intrinsicHeight = height 
      curvedSidesShape.paint.color = Color.RED 
      background = curvedSidesShape 
      mHeight = height 
     } 
    } 
} 
関連する問題