角丸長方形の枠線の透明な角を実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-07 14:35:03
オリジナル
180 人が閲覧しました

How to Achieve Transparent Corners in a Rounded Rectangle Border?

角が丸い境界線と透明度: 背景の角を削除する

問題ステートメント:

クエリは TextBubbleBorder を中心に展開します。テキスト領域用にデザインされたカスタム境界線。ただし、境界線を使用して角丸四角形を作成すると (ポインター サイズを 0 に設定して)、四角形の外側の角は不透明なままとなり、必要な透明度ではなくデフォルトのパネル カラーが表示されます。

ソリューションの概要:

境界線の角を透明にする鍵は、角丸四角形の外側の領域に親コンポーネントの背景色をペイントすることにあります。これには以下が含まれます:

  1. 境界線の外側の領域を識別します (エリアを使用)。
  2. この領域を除外するクリッピング パスを作成します。
  3. グラフィックス コンテキストのクリップを設定します。
  4. 親の背景を描画します。
  5. 元のクリップを復元します。

修正コード:

TextBubbleBorder クラス内の次の変更されたPaintBorder メソッドには、上記の手順が組み込まれています:

@Override
public void paintBorder(
        Component c,
        Graphics g,
        int x, int y,
        int width, int height) {

    Graphics2D g2 = (Graphics2D) g;

    // ... (unchanged code)

    // Paint the BG color of the parent, everywhere outside the clip
    // of the text bubble.
    Component parent  = c.getParent();
    if (parent!=null) {
        Color bg = parent.getBackground();
        Rectangle rect = new Rectangle(0,0,width, height);
        Area borderRegion = new Area(rect);
        borderRegion.subtract(area);
        g2.setClip(borderRegion);
        g2.setColor(bg);
        g2.fillRect(0, 0, width, height);
        g2.setClip(null);
    }

    // ... (unchanged code)
}
ログイン後にコピー

結果:

この変更により、親の背景が効果的に外側の領域に描画されます。角を丸くして、目的の透明な境界線を作成します。親コンポーネントとシームレスに統合される、透明な境界線を持つ角丸長方形を作成できるようになりました。

以上が角丸長方形の枠線の透明な角を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!