UI繪制_Paint的高級渲染

上一篇講解了Paint的基本使用废登,從初始化到繪制融击,學好了基本功接下來要開始Paint的高級渲染的部分在開始之前還是要留一下Paint的基本使用的地址

Paint的基本使用 http://www.reibang.com/p/88d718d1945e

開始擼碼~

正文

先來看一下要搞的效果圖


原圖.jpg
compose_shader.png
zoomImageView.gif.gif

ok,在Android中提供了如下的渲染類

  1. BitmapShader 位圖圖像渲染篮灼,可以使用它來做圓形頭像 放大鏡的效果

     /**
      * TileMode.CLAMP 拉伸最后一個像素去鋪滿剩下的地方
      * TileMode.MIRROR 通過鏡像翻轉(zhuǎn)鋪滿剩下的地方缔刹。
      * TileMode.REPEAT 重復圖片平鋪整個畫面(電腦設(shè)置壁紙)
      */
     BitmapShader bitMapShader = new BitmapShader(mBitMap,Shader.TileMode.MIRROR,Shader.TileMode.MIRROR);
    
  2. LinearGradient 線性渲染

     /**線性漸變
      * x0, y0, 起始點
      *  x1, y1, 結(jié)束點
      * int[]  mColors, 中間依次要出現(xiàn)的幾個顏色
      * float[] positions,數(shù)組大小跟colors數(shù)組一樣大搂根,中間依次擺放的幾個顏色分別放置在那個位置上(參考比例從左往右)
      *    tile
      */
     LinearGradient linearGradient = new LinearGradient( 0, 0,800, 800, mColors, null, Shader.TileMode.CLAMP);
    
  3. RadialGradient 環(huán)形渲染

     RadialGradient mRadialGradient = new RadialGradient(300, 300, 100, mColors, null, Shader.TileMode.REPEAT);
    
  4. SweepGradient 漸變渲染

     SweepGradient mSweepGradient = new SweepGradient(300, 300, mColors, null);
    
  5. ComposeShader 組合渲染

     ComposeShader mComposeShader = new ComposeShader(linearGradient, bitMapShader, PorterDuff.Mode.DST_IN);
    

使用起來非常的簡單断楷,首先我們就使用composeShader來實現(xiàn)第二張圖的效果

//圖像渲染
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
LinearGradient linearGradient = new LinearGradient(0, 0, width, height, Color.GREEN, Color.BLUE, Shader.TileMode.REPEAT);
RadialGradient radialGradient = new RadialGradient(width / 2, height / 2, width / 2, new int[]{0xffff0000, 0xff00ff00, 0xff0000ff}, null, Shader.TileMode.CLAMP);
SweepGradient sweepGradient = new SweepGradient(width / 2, height / 2, new int[]{0xffff0000, 0xff00ff00, 0xff0000ff}, null);
//將圖像渲染和環(huán)形漸變進行組合科平,組合的形式是增強
ComposeShader composeShader = new ComposeShader(bitmapShader, radialGradient, PorterDuff.Mode.MULTIPLY);

mPaint.setShader(composeShader);
//繪制矩形區(qū)域用于顯示組合之后的效果
canvas.drawRect(0, 0, width, height, mPaint);

然后我們使用BitmapShader來實現(xiàn)放大鏡的效果

  • 得到放大后圖片

      //放大后的整個圖片
      Bitmap scaleBitmap = Bitmap.createScaledBitmap(mBitmap, mBitmap.getWidth() * factor, mBitmap.getHeight() * factor, true);
      bitmapShader = new BitmapShader(scaleBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    
  • 設(shè)置圓形的放大鏡并將BitmapShader設(shè)置給放大鏡Drawable

      mShapeDrawable = new ShapeDrawable(new OvalShape());
      mShapeDrawable.getPaint().setShader(bitmapShader);
      mShapeDrawable.setBounds(0, 0, RADIUS * 2, RADIUS * 2);
      matrix = new Matrix();
    
  • 隨著手指滑動褥紫,放大鏡不斷移動位置

      //將放大鏡的圖片往相反的方向挪動
      matrix.setTranslate(-x * factor + RADIUS, -y * factor + RADIUS);
      mShapeDrawable.getPaint().getShader().setLocalMatrix(matrix);
      //切出手勢區(qū)域的位置的圓
      mShapeDrawable.setBounds(x - RADIUS, y - RADIUS, x + RADIUS, y + RADIUS);
      invalidate();
    

使用Android的渲染還能做好多的炫酷的效果,這里就不一一進行說明瞪慧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末髓考,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弃酌,更是在濱河造成了極大的恐慌绳军,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矢腻,死亡現(xiàn)場離奇詭異门驾,居然都是意外死亡,警方通過查閱死者的電腦和手機多柑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門奶是,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竣灌,你說我怎么就攤上這事聂沙。” “怎么了初嘹?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵及汉,是天一觀的道長。 經(jīng)常有香客問我屯烦,道長坷随,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任驻龟,我火速辦了婚禮温眉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翁狐。我一直安慰自己类溢,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布露懒。 她就那樣靜靜地躺著闯冷,像睡著了一般砂心。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛇耀,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天计贰,我揣著相機與錄音,去河邊找鬼蒂窒。 笑死躁倒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的洒琢。 我是一名探鬼主播秧秉,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衰抑!你這毒婦竟也來了象迎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呛踊,失蹤者是張志新(化名)和其女友劉穎砾淌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谭网,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡汪厨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉择。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫乱。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锥涕,靈堂內(nèi)的尸體忽然破棺而出衷戈,到底是詐尸還是另有隱情,我是刑警寧澤层坠,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布殖妇,位于F島的核電站,受9級特大地震影響破花,放射性物質(zhì)發(fā)生泄漏谦趣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一旧乞、第九天 我趴在偏房一處隱蔽的房頂上張望蔚润。 院中可真熱鬧磅氨,春花似錦尺栖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽除盏。三九已至,卻和暖如春挫以,著一層夾襖步出監(jiān)牢的瞬間者蠕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工掐松, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踱侣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓大磺,卻偏偏與公主長得像抡句,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杠愧,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 系列文章之 Android中自定義View(一)系列文章之 Android中自定義View(二)系列文章之 And...
    YoungerDev閱讀 2,171評論 0 4
  • 我認為人生的意義不在于你有多大成就和有多大權(quán)力 人生的意義在于等到老了以后能夠記起來有多少個十分開心令人難忘的日子
    __Sapiosexual閱讀 97評論 0 0
  • 我使用的Yii2.0框架需要配置三個虛擬域名對應(yīng)三個不用的功能 127.0.0.1 admin.demo.c...
    wsuper閱讀 459評論 0 3
  • 十月份的“第一天”流济,你打算怎么打開這新的一月锐锣。 國慶中秋小長假悄無聲息的就快結(jié)束了,這些天绳瘟,大家都在哀嚎自己的假期...
    7bc7efaa2f5e閱讀 258評論 0 0
  • 總是想要寫些什么雕憔,可提筆又不知道要說什么,羨慕別人那么有文采糖声,羨慕人家那么厲害橘茉,有好的工作。其實 我都知道姨丈,這一切...
    何施予閱讀 146評論 0 0