TextView
グラデーションの背景の上に表示する必要があります。それTextView
自体は無地の白い背景で、テキストは透明である必要があります。
ただし、テキストに透明色 (#00000000) を設定しても機能しません。白い四角形が表示されるだけで、テキストがある場所に背景が表示されません (テキストはTextView
背景と同じ色になります)。
背景色付きの透明なテキストを に表示するにはどうすればよいTextView
ですか?
TextView
グラデーションの背景の上に表示する必要があります。それTextView
自体は無地の白い背景で、テキストは透明である必要があります。
ただし、テキストに透明色 (#00000000) を設定しても機能しません。白い四角形が表示されるだけで、テキストがある場所に背景が表示されません (テキストはTextView
背景と同じ色になります)。
背景色付きの透明なテキストを に表示するにはどうすればよいTextView
ですか?
私は小さなライブラリを作成し、この回答からブログ投稿を書いたので、コードをコピーして貼り付ける必要はありません。メンテナンスは私が行います。:)
xml のビューを次のように使用します。
<it.gilvegliach.android.transparenttexttextview.TransparentTextTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/view_bg"
android:text="Hello World" />
Gradle の依存関係:
compile 'it.gilvegliach.android:transparent-text-textview:1.0.3'
これは、その効果を達成する方法です。
これは、それを行う単純なサブクラスですTextView
。
final public class SeeThroughTextView extends TextView
{
Bitmap mMaskBitmap;
Canvas mMaskCanvas;
Paint mPaint;
Drawable mBackground;
Bitmap mBackgroundBitmap;
Canvas mBackgroundCanvas;
boolean mSetBoundsOnSizeAvailable = false;
public SeeThroughTextView(Context context)
{
super(context);
mPaint = new Paint();
mPaint.setXfermode(new PorterDuffXfermode(Mode.DST_OUT));
super.setTextColor(Color.BLACK);
super.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
@Override
@Deprecated
public void setBackgroundDrawable(Drawable bg)
{
mBackground = bg;
int w = bg.getIntrinsicWidth();
int h = bg.getIntrinsicHeight();
// Drawable has no dimensions, retrieve View's dimensions
if (w == -1 || h == -1)
{
w = getWidth();
h = getHeight();
}
// Layout has not run
if (w == 0 || h == 0)
{
mSetBoundsOnSizeAvailable = true;
return;
}
mBackground.setBounds(0, 0, w, h);
invalidate();
}
@Override
public void setBackgroundColor(int color)
{
setBackgroundDrawable(new ColorDrawable(color));
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
mBackgroundBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mBackgroundCanvas = new Canvas(mBackgroundBitmap);
mMaskBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mMaskCanvas = new Canvas(mMaskBitmap);
if (mSetBoundsOnSizeAvailable)
{
mBackground.setBounds(0, 0, w, h);
mSetBoundsOnSizeAvailable = false;
}
}
@Override
protected void onDraw(Canvas canvas)
{
// Draw background
mBackground.draw(mBackgroundCanvas);
// Draw mask
mMaskCanvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
super.onDraw(mMaskCanvas);
mBackgroundCanvas.drawBitmap(mMaskBitmap, 0.f, 0.f, mPaint);
canvas.drawBitmap(mBackgroundBitmap, 0.f, 0.f, null);
}
}
スクリーンショットの例: アクティビティの背景に藍色のパターン、TextView の背景にピンクの塗りつぶし。
これは、単色の背景と一般的なドローアブルの両方で機能します。いずれにせよ、これは BASIC 実装のみであり、タイリングなどの一部の機能はサポートされていません。
次のコードを textview タグに追加します。
android:background="#07000000"
Textviewの背景で何でもしますが、Textviewのテキストを透明にするには、以下のコードを使用します。
<TextView
...
...
android:textColor="#00000000" >
</TextView>
これがお役に立てば幸いです...