日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android绘制花边view-WaveLineView

發布時間:2024/3/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android绘制花边view-WaveLineView 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目開發中需要開發漂亮的界面,其中一些界面需要花邊

例如:


如果切圖切整一條,那么他只適用于該分辨率的手機,如果放到其它手機上或放到平板上,他就會被拉長,用.9圖也是一樣會被拉長,那么該怎么辦呢?

對于這種情況,我們只好切出波浪線重復的那一部分:


img_wave.png

拿到這部分之后,我們開始自定義一個view,用view的ondraw繪制橫向繪制這個重復部分、

繪制之前,我們需要將img_wave放大到view得高度:

[java]? view plain copy print ?
  • float?scale?=?getMeasuredHeight()*1f/bitmap.getHeight();??
  • float?width?=?bitmap.getWidth()*1f*scale;??
  • 同時也需要計算繪制的個數,讓繪制的效果達到最好:

    [java]? view plain copy print ?
  • waveCount?=?(int)(getMeasuredWidth()*1f/bitmap.getWidth())+1;??
  • ?上面+1的原因是因為讓它多出一個,足以鋪滿,

    +1個之后寬度超出view寬度,再重新計算img_wavw的繪制寬度及縮放比例:

    [java]? view plain copy print ?
  • waveWidth?=?width?-?((width*waveCount-getMeasuredWidth())/waveCount);??
  • waveScale?=?waveWidth*1f/bitmap.getWidth();??
  • 最后,橫向繪制波浪:

    [java]? view plain copy print ?
  • matrix.setScale(waveScale,?waveScale);??
  • for?(int?i?=?0;?i?<?waveCount;?i++)?{??
  • canvas.drawBitmap(bitmap_wave.get(),?matrix,?paint);??
  • matrix.postTranslate(waveWidth,?0);??
  • }??

  • 最后效果圖如下:



    是不是很棒?最后貼出代碼,希望能幫到大家:

    [html]? view plain copy print ?
  • /**??
  • ?*?無縫花邊??
  • ?*?@author?touch_ping??
  • ?*??
  • ?*/??
  • public?class?WaveLineView?extends?View?{??
  • ????private?final?static?int?waveRes?=?R.drawable.img_wave;??
  • ????private?static?SoftReference<Bitmap>?bitmap_wave;//?背景??
  • ????private?Context?mcontext;??
  • ????private?static?Paint?paint;??
  • ????private?static?Matrix?matrix;??
  • ????private?static?float?waveWidth;??
  • ????private?static?float?waveScale;??
  • ????private?static?int?waveCount;??
  • ??????
  • ????public?WaveLineView(Context?context)?{??
  • ????????super(context);??
  • ????????init(context);??
  • ????}??
  • ??
  • ????public?WaveLineView(Context?context,?AttributeSet?attrs)?{??
  • ????????super(context,?attrs,?0);??
  • ????????init(context);??
  • ????}??
  • ??????
  • ????private?void?init?(Context?context)?{??
  • ????????mcontext?=?context;??
  • ????}??
  • ??????
  • ??
  • ????@Override??
  • ????protected?void?onDraw(Canvas?canvas)?{??
  • ????????super.onDraw(canvas);??
  • ????????if?(paint==null)?{??
  • ????????????paint?=?new?Paint();??
  • ????????}??
  • ????????if?(matrix==null)?{??
  • ????????????matrix?=?new?Matrix();??
  • ????????}??
  • ????????if?(bitmap_wave==null?||?bitmap_wave.get()==null)?{??
  • ????????????//?從資源文件中生成位圖?????
  • ????????????Bitmap?bitmap?=?BitmapFactory.decodeResource(getResources(),?waveRes);??
  • ??????????????
  • ????????????float?scale?=?getMeasuredHeight()*1f/bitmap.getHeight();??
  • ????????????float?width?=?bitmap.getWidth()*1f*scale;??
  • ????????????waveCount?=?(int)(getMeasuredWidth()*1f/width)+1;??
  • ??????????????
  • ????????????waveWidth?=?width?-?((width*waveCount-getMeasuredWidth())/waveCount);??
  • ????????????waveScale?=?waveWidth*1f/bitmap.getWidth();??
  • ??????????????
  • ????????????bitmap_wave?=?new?SoftReference<Bitmap>(bitmap);??
  • ????????}??
  • ??????????
  • ????????matrix.setScale(waveScale,?waveScale);??
  • ????????for?(int?i?=?0;?i?<?waveCount;?i++)?{??
  • ????????????canvas.drawBitmap(bitmap_wave.get(),?matrix,?paint);??
  • ????????????matrix.postTranslate(waveWidth,?0);??
  • ????????}??
  • ????}??
  • } ?
  • 總結

    以上是生活随笔為你收集整理的android绘制花边view-WaveLineView的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。