国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android給任何view添加全屏傾斜水印

2019-10-22 18:25:06
字體:
來源:轉載
供稿:網友

本文主要介紹了Android給任何view添加全屏傾斜水印,具體如下,分享給大家

如果要實現如下效果

Android,全屏傾斜水印,Android全屏水印,Android添加水印

目前有兩種思路:

1.先畫出帶有水平文字的照片,然后再和原圖合成即可

2.旋轉畫布,然后直接畫布寫字即可

兩種方案都差不多,這里講解的第二種方案。

但是兩種方案都存在問題,就是文字需要完全覆蓋,那么就需要我們的畫布要比圖片大,其實只要把畫布移動到原圖的外切圖即可。

為了簡單分析問題,我們取最長的邊,把原圖當成正方形,外切正方形的邊長即為對角邊。如下圖

Android,全屏傾斜水印,Android全屏水印,Android添加水印

從上圖我們可以看出,我們需要旋轉45度然后平移回來,平移的距離,從下圖可以分析出為兩邊的差值。

Android,全屏傾斜水印,Android全屏水印,Android添加水印

Android,全屏傾斜水印,Android全屏水印,Android添加水印

具體代碼如下,注釋也比較詳細,就不再展開說了

 public static Bitmap getMarkTextBitmap(Context gContext, String gText, int width, int height, boolean is4Showing){//  Bitmap bitmap = ACache.get(gContext).getAsBitmap(gText);//  if (is4Showing && bitmap != null){//   return bitmap;//  }  float textSize;  float inter;  if (is4Showing){   textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18, gContext.getResources().getDisplayMetrics());   inter = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 25, gContext.getResources().getDisplayMetrics());  } else {   textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 54, gContext.getResources().getDisplayMetrics());   inter = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 75, gContext.getResources().getDisplayMetrics());  }  int sideLength;  if (width > height) {   sideLength = (int) Math.sqrt(2*(width * width));  } else {   sideLength = (int) Math.sqrt(2*(height * height));  }  Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);  Rect rect = new Rect();  paint.setTextSize(textSize);  //獲取文字長度和寬度  paint.getTextBounds(gText, 0, gText.length(), rect);  int strwid = rect.width();  int strhei = rect.height();  Bitmap markBitmap = null;  try {   markBitmap = Bitmap.createBitmap(sideLength, sideLength, Bitmap.Config.ARGB_4444);   Canvas canvas = new Canvas(markBitmap);   //創建透明畫布   canvas.drawColor(Color.TRANSPARENT);   paint.setColor(Color.BLACK);   paint.setAlpha((int) (0.1*255f));   // 獲取跟清晰的圖像采樣   paint.setDither(true);   paint.setFilterBitmap(true);   //先平移,再旋轉才不會有空白,使整個圖片充滿   if (width > height) {    canvas.translate(width - sideLength - inter, sideLength - width + inter);   } else {    canvas.translate(height - sideLength - inter, sideLength - height + inter);   }   //將該文字圖片逆時針方向傾斜45度   canvas.rotate(-45);   for (int i =0; i <= sideLength; ){    int count = 0;    for (int j =0; j <= sideLength; count++){     if (count % 2 == 0){      canvas.drawText(gText, i, j, paint);     } else {      //偶數行進行錯開      canvas.drawText(gText, i + strwid/2, j, paint);     }     j = (int) (j + inter + strhei);    }    i = (int) (i + strwid + inter);   }   canvas.save(Canvas.ALL_SAVE_FLAG);//  ACache.get(gContext).put(gText, markBitmap);  } catch (OutOfMemoryError e) {   Util.LOGD(TAG, e);   if(markBitmap != null && !markBitmap.isRecycled()){    markBitmap.recycle();    markBitmap = null;   }  }  return markBitmap; }
 /**  * 獲得文字水印的圖片  * @param width  * @param height  * @return  */ public static Drawable getMarkTextBitmapDrawable(Context gContext, String gText, int width, int height, boolean is4Showing){  Bitmap bitmap = getMarkTextBitmap(gContext, gText, width, height, is4Showing);  if (bitmap != null){   BitmapDrawable drawable = new BitmapDrawable(gContext.getResources(), bitmap);   drawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);   drawable.setDither(true);//   Drawable drawableFinal = drawable.getConstantState().newDrawable();//   if(!bitmap.isRecycled()){//    bitmap.recycle();//    bitmap = null;//   }//   return drawable;  }  return null; }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永川市| 习水县| 三原县| 丽江市| 无为县| 广丰县| 商南县| 宿迁市| 虹口区| 务川| 荔波县| 徐汇区| 田林县| 晴隆县| 南宁市| 汨罗市| 略阳县| 唐河县| 土默特左旗| 泗阳县| 汕头市| 金门县| 军事| 岱山县| 辛集市| 红安县| 湘阴县| 民权县| 金塔县| 万州区| 广德县| 玉树县| 太仓市| 大荔县| 呼玛县| 芮城县| 九寨沟县| 怀远县| 永和县| 遵义市| 仁化县|