Androidでグラデーション付きテキストを表示する
2023-08-28 22:06:32
質問
どのようにすれば
TextView
を拡張して、グラデーション効果のあるテキストを描画できるようにするにはどうしたらよいでしょうか。
どのように解決するのですか?
TextViewを拡張して、テキストをグラデーションで描画することはできないようです。しかし、キャンバスを作成し、そこに描画することでこの効果を得ることができます。まず でカスタム UI 要素を宣言します。 . のサブクラスを作成する必要があります。 レイアウト . この場合 ボーリングレイアウト を使用します。
Shader textShader=new LinearGradient(0, 0, 0, 20,
new int[]{bottom,top},
new float[]{0, 1}, TileMode.CLAMP);//Assumes bottom and top are colors defined above
textPaint.setTextSize(textSize);
textPaint.setShader(textShader);
BoringLayout.Metrics boringMetrics=BoringLayout.isBoring(text, textPaint);
boringLayout=new BoringLayout(text, textPaint, 0, Layout.Alignment.ALIGN_CENTER,
0.0f, 0.0f, boringMetrics, false);
次に
onMeasure
と
onDraw
:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
setMeasuredDimension((int) textPaint.measureText(text), (int) textPaint.getFontSpacing());
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
boringLayout.draw(canvas);
}
私たちの実装では
onDraw
の実装はこの時点ではかなりいい加減なものですが(計測の仕様を完全に無視しています!)、ビューに十分なスペースが与えられていることを保証する限りは、問題なく動作するはずです。
別の方法として、このメソッドは
Canvas
をオーバーライドして
onPaint
メソッドをオーバーライドします。このようにすると、残念ながら描画されるテキストのアンカーは常に下に来るので
-textPaint.getFontMetricsInt().ascent()
をy座標に追加する必要があります。
関連
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] TextViewのリンクをクリック可能にする方法
-
[解決済み] AndroidでTextViewをスクロール可能にする
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] アンドロイドボタンセレクター
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] XMLを用いたカスタムandroid UI要素の宣言
-
[解決済み] 実行時にAndroidのビューのサイズを決定する
-
[解決済み] Androidの連絡先リストを呼び出すには?
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] Android Studioの「未実装メソッドの追加」機能
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] アンドロイドボタンセレクター
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない