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

首頁 > 系統 > Android > 正文

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

2019-12-12 01:49:56
字體:
來源:轉載
供稿:網友

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

如果要實現如下效果


目前有兩種思路:

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

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

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

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

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


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


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

 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; }

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黑龙江省| 永寿县| 达州市| 平乐县| 合山市| 韶关市| 阿拉善盟| 澳门| 茌平县| 江山市| 哈密市| 晋江市| 丹凤县| 天津市| 河东区| 康平县| 东丰县| 仙桃市| 贵溪市| 中宁县| 威远县| 阿鲁科尔沁旗| 定日县| 资阳市| 肃宁县| 都昌县| 嘉黎县| 伊吾县| 青河县| 呼伦贝尔市| 句容市| 宜黄县| 林甸县| 泌阳县| 奉贤区| 潼关县| 临洮县| 神农架林区| 德惠市| 罗源县| 上思县|