Android(安卓)解决部分机型水印变黑问题
16lz
2021-01-26
Android 解决部分机型水印变黑问题
- 前言
- 水印实现
- 解决部分机型水印变黑问题
前言
原来项目里边,对WebView内容增加了水印的设置。最近有好几个华为用户吐槽,水印文字太深。看了一下,根本就是纯黑,透明度都失效了。后面换了一下水印的实现方式,就解决了这个问题。
水印实现
原来水印实现的方式,就是在WebView上面放一层布局,然后布局设置一个自定义Drawable,在自定义Drawable中用paint画出水印文字,然后布局背景再设置为自定义的Drawable。
- WebView上放置一层水印层
<WebView android:layout_width="match_parent" android:layout_height="match_parent"/> <FrameLayout android:id="@+id/fl_watermark" android:layout_width="match_parent" android:layout_height="match_parent" android:alpha="0.3"/>
- 自定义水印的Drawable
public class WatermarkDrawable extends Drawable { @Override public void draw(@NonNull Canvas canvas) { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK); paint.setAlpha(0x1f); Rect rect = new Rect(); int x = 0; int y = 0; for (int i = 0; i < 50; i++) { for (int j = 0; j < 50; j++) { // 画水印文字 paint.setTextSize(32); paint.getTextBounds("Test", 0, "Test".length(), rect); canvas.drawText("Test", x, rect.height() + y, paint); } } } @Override public void setAlpha(int i) { } @Override public void setColorFilter(@Nullable ColorFilter colorFilter) { } @Override public int getOpacity() { return 0; }}
- 设置水印
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e(TAG, "onCreate"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { findViewById(R.id.fl_watermark).setBackground(new WatermarkDrawable()); } else { findViewById(R.id.fl_watermark).setBackgroundDrawable(new WatermarkDrawable()); } }
解决部分机型水印变黑问题
用上述步骤可以显示水印,可在华为的部分机型上水印变黑了。应该是paint的透明度失效了,可以转变一下,不对paint设置透明度,而是对整一个水印层设置透明度就可以解决这个问题了
- 去掉Drawable画笔的透明度
@Override public void draw(@NonNull Canvas canvas) { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK);// paint.setAlpha(0x1f);去掉透明度 Rect rect = new Rect(); int x = 0; int y = 0; for (int i = 0; i < 50; i++) { for (int j = 0; j < 50; j++) { // 画水印文字 paint.setTextSize(32); paint.getTextBounds("Test", 0, "Test".length(), rect); canvas.drawText("Test", x, rect.height() + y, paint); } } }
- 在布局对水印层设置透明度
<FrameLayout android:id="@+id/fl_watermark" android:layout_width="match_parent" android:layout_height="match_parent" android:alpha="0.3"/>
更多相关文章
- 几行代码,让你的app动感起来--Android(安卓)Design Support Libra
- Android透明度数值记录
- Android(安卓)Studio 一些方便使用的设置
- Android车轮之图片加载框架Android-Universal-Image-Loader
- Android(安卓)Studio--使用活动响应网页
- Android花样Text设置神器之SpanableString
- Android(安卓)高仿微信6.0主界面 带你玩转切换图标变色
- Android使用SVG小结
- Android(安卓)webview 设置cookie 保持登录状态