在android中修改Textview的属性

时间:2014-01-02 09:15:08

标签: android transparentproxy

我的scrollView中有一个ActivityscrollView的背景有多种颜色。

<ScrollView ---------->
  <RelativeLayout -------------/>
</ScrollView>

我的RelativeLayout动态添加了视图。

膨胀的xml:

<RelativeLayout --------------android:background="some transparent image">
  <TextView --------- ---------/>
</RelativeLayout>

我希望我的文字颜色与背景颜色相同。我曾在很多方面尝试过该解决方案,但未能成功。

在iOS中,为了达到这个目的,他们使用了RSMaskedLabel(第三方类),但我在Android中找不到与此类似的内容。

我仍然没有找到任何解决方案,任何人都可以帮助我。我尝试使用Bitmaps和Canvas,但没有为我工作。

enter image description here

1 个答案:

答案 0 :(得分:1)

有关如何使用自定义TextView实现此目的的一些指导原则:

  1. 扩展TextView组件
  2. 创建BitmapCanvas,用于绘制背景和文字
  3. 将想要的背景颜色绘制为已分配的Canvas(例如Color.argb(80, 255, 255, 255)
  4. 使用模式Paint的{​​{1}}绘制文字(请记住:只分配PorterDuffXfermode(Mode.CLEAR)Bitmap一次),因为您将其绘制到Canvas
  5. Bitmap绘制到Bitmap画布
  6. 以下是一些示例代码:

    TextViews

    如果您要动态设置文字,则需要重置public class TransparentTextView extends TextView { private Paint mTextPaint; private Bitmap mBitmapToDraw; public TransparentTextView(Context context) { super(context); setup(); } public TransparentTextView(Context context, AttributeSet attrs) { super(context, attrs); setup(); } public TransparentTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setup(); } private void setup() { mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mTextPaint.setTextSize(getTextSize()); mTextPaint.setStyle(Paint.Style.FILL); mTextPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); } @Override protected void onDraw(Canvas canvas) { if (mBitmapToDraw == null) { mBitmapToDraw = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); if (mBitmapToDraw != null) { Canvas c = new Canvas(mBitmapToDraw); c.drawColor(Color.argb(80, 255, 255, 255)); c.drawText(getText().toString(), getPaddingLeft(), getPaddingTop(), mTextPaint); } } if (mBitmapToDraw != null) { canvas.drawBitmap(mBitmapToDraw, 0, 0, null); } else { super.onDraw(canvas); } } } 才能刷新文字。