[解決済み】Android:LinearLayoutにボーダーを描画する方法
質問
3つのファイルがあります。XML、draw関数、main Activityです。
いくつかの
LinearLayout
をXMLファイル内に記述しています。
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#ef3"
android:id="@+id/img01"/>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#E8A2B4"
android:id="@+id/img02"/>
</LinearLayout>
これが描画機能です。
public class getBorder extends TextView {
public getBorder(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(android.graphics.Color.RED);
canvas.drawLine(0, 0, this.getWidth() - 1, 0, paint);
canvas.drawLine(0, 0, 0, this.getHeight() - 1, paint);
canvas.drawLine(this.getWidth() - 1, 0, this.getWidth() - 1,
this.getHeight() - 1, paint);
canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1,
this.getHeight() - 1, paint);
}
}
そして、これがメインのアクティビティです。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final getBorder getBorder = new getBorder(this);
final LinearLayout img01 = (LinearLayout) findViewById(R.id.img01);
img01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
getBorder.setWidth(100);
getBorder.setHeight(100);
img01.addView(getBorder);
}
});
}
プログラムはボーダーを描くことができますが、そのサイズは
LinearLayout
. をクリックすると
LinearLayout
を再度実行すると、プログラムがクラッシュしました。
また、中央に2つの円を描きたいのですが、これは
LinearLayout
しかし、どのように中心座標を決定すればよいのでしょうか?
どのように解決するのですか?
本当にプログラムでやる必要があるのか?
タイトルを考えただけで ShapeDrawableをandroid:backgroundとして使えばいいのでは...。
たとえば、次のように定義します。
res/drawable/my_custom_background.xml
としています。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="2dp"
android:topRightRadius="0dp"
android:bottomRightRadius="0dp"
android:bottomLeftRadius="0dp" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
</shape>
で、android:background="@drawable/my_custom_background"を定義します。
テストはしていませんが、うまくいくはずです。
更新しました。
xml shapeの描画可能なリソースパワーを活用する方が、ニーズに合っていると思います。ゼロからのプロジェクト(android-8用)で、res/layout/main.xmlを定義します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/border"
android:padding="10dip" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World, SOnich"
/>
[... more TextView ...]
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World, SOnich"
/>
</LinearLayout>
と
res/drawable/border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="5dip"
android:color="@android:color/white" />
</shape>
gingerbread端末で動作することが報告されています。を関連付ける必要があることに注意してください。
android:padding
をLinearLayoutの
android:width
shape/stroke の値です。を使用しないでください。
@android:color/white
を最終的なアプリケーションで使用するのではなく、プロジェクトで定義された色を使用します。
を適用することができます。
android:background="@drawable/border" android:padding="10dip"
を、提供されたサンプルのLinearLayoutのそれぞれに適用してください。
他の方の投稿で、LinearLayoutの背景に円を表示させたいとのことですが、Inset/Scale/Layerのdrawableリソースで遊んでいます( 描画可能なリソースを見る を参考に、LinearLayoutの背景に完全な円を表示するようなものを作ろうとしましたが、今のところ失敗しています...。
あなたの問題は、明らかに
getBorder.set{Width,Height}(100);
. なぜ、onClickメソッドでそのようなことをするのでしょうか?
ポイントを外さないためには、さらなる情報が必要です。なぜ、プログラム的にそれを行うのですか?動的な動作が必要なのでしょうか?入力のドローアブルはpngかShapeDrawableか、など。
続きは、明日、あなたが何を達成したいのか、より詳細な情報を提供し次第、お知らせします。
関連
-
[解決済み】apkインストール時のINSTALL_FAILED_NO_MATCHING_ABIS
-
[解決済み] Xlint:deprecationを使用して再コンパイルする方法
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Androidのテキストビューの周りにボーダーを付けるには?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンテンツには、id属性が「android.R.id.list」であるListViewが必要です。
-
[解決済み】Android Studioの初回起動。Android SDKアドオンリストにアクセスできない
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】カメラサービスへの接続に失敗しました。
-
[解決済み】getCheckedRadioButtonId()が無駄なintを返す?
-
[解決済み】googleコンソールエラー`OR-IEH-01`について
-
[解決済み] Android Studioで「URIが登録されていません」と報告されるのはなぜですか?[クローズド]
-
[解決済み] コンパイルした.apkを端末にインストールしようとするとINSTALL_FAILED_UPDATE_INCOMPATIBLEが表示される
-
[解決済み] 起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み] com.android.supportのライブラリは全て全く同じバージョン表記である必要があります。