成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

圖片滑動漸變

移動開發
Android圖片滑動漸變,實現動畫特效。

源碼簡介:Android圖片滑動漸變,實現動畫特效。

源碼效果:

源碼片段:

  1. package com.example.tz_demo_8_14; 
  2.   
  3. import android.graphics.Canvas; 
  4. import android.graphics.ColorFilter; 
  5. import android.graphics.Rect; 
  6. import android.graphics.drawable.Drawable; 
  7. import android.util.Log; 
  8. import android.view.Gravity; 
  9.   
  10. public class RevealDrawable extends Drawable { 
  11.   
  12.     private Drawable mUnSelectedDrawable; 
  13.     private Drawable mSelectedDrawable; 
  14.     private Rect outRect = new Rect(); 
  15.   
  16.     public RevealDrawable(Drawable unSelectedDrawable, Drawable selectedDrawable) { 
  17.         this.mUnSelectedDrawable = unSelectedDrawable; 
  18.         this.mSelectedDrawable = selectedDrawable; 
  19.     } 
  20.   
  21.     /** 
  22.      * level:0~10000 全彩色:5000 全灰色:0||10000 漸變色:5000~10000 
  23.      */ 
  24.     @Override 
  25.     public void draw(Canvas canvas) { 
  26.           
  27.         int level = getLevel(); 
  28.         if (level == 0 || level == 10000) { 
  29.             // 全灰色 
  30.             mUnSelectedDrawable.draw(canvas); 
  31.         } else if (level == 5000) { 
  32.             // 全彩色 
  33.             mSelectedDrawable.draw(canvas); 
  34.         } else { 
  35.             // 漸變色(一部分灰色,一部分彩色): 
  36.             // 得到當前Drawable的矩形邊界 
  37.             Rect bounds = getBounds(); 
  38.             Rect r = outRect; 
  39.               
  40.             {// 1.從灰色的圖片摳出左邊的部分矩形 
  41.                 // level:0~5000~10000 
  42.                 float ratio = (level / 5000f) - 1f; 
  43.                 int w = bounds.width(); 
  44.                 w = (int) (w * Math.abs(ratio)); 
  45.                 int h = bounds.height(); 
  46.                 int gravity = ratio < 0 ? Gravity.LEFT : Gravity.RIGHT; 
  47.   
  48.                 Gravity.apply(gravity, // 從左邊開始切還是從右邊 
  49.                         w, // 目標矩形的寬 
  50.                         h, // 目標矩形的高 
  51.                         bounds, // 被摳出來的原矩形 
  52.                         r);// 目標矩形 -- 最終畫布里面需要的矩形區域 
  53.   
  54.                 // 保存畫布的原型 
  55.                 canvas.save(); 
  56.                 // 將畫布裁剪一部分出來 
  57.                 canvas.clipRect(r); 
  58.                 mUnSelectedDrawable.draw(canvas); 
  59.                 // 恢復畫布 
  60.                 canvas.restore(); 
  61.             } 
  62.             {// 2. 從彩色的圖片摳出右邊的部分矩形 
  63.                 // level:0~5000~10000 
  64.                 float ratio = (level / 5000f) - 1f; 
  65.                 int w = bounds.width(); 
  66.                 w -= (int) (w * Math.abs(ratio)); 
  67.                 int h = bounds.height(); 
  68.                 int gravity = ratio < 0 ? Gravity.RIGHT : Gravity.LEFT; 
  69.   
  70.                 Gravity.apply(gravity, // 從左邊開始切還是從右邊 
  71.                         w, // 目標矩形的寬 
  72.                         h, // 目標矩形的高 
  73.                         bounds, // 被摳出來的原矩形 
  74.                         r);// 目標矩形 -- 最終畫布里面需要的矩形區域 
  75.   
  76.                 // 保存畫布的原型 
  77.                 canvas.save(); 
  78.                 // 將畫布裁剪一部分出來 
  79.                 canvas.clipRect(r); 
  80.                 mSelectedDrawable.draw(canvas); 
  81.                 // 恢復畫布 
  82.                 canvas.restore(); 
  83.             } 
  84.         } 
  85.     } 
  86.       
  87.     @Override 
  88.     protected boolean onLevelChange(int level) { 
  89.         // 感知setLevel的調用,然后刷新 -- draw() 
  90.         invalidateSelf(); 
  91.         return true
  92.     } 
  93.   
  94.     /** 
  95.      * 初始化數據 
  96.      */ 
  97.     @Override 
  98.     protected void onBoundsChange(Rect bounds) { 
  99.         // 定義兩個Drawable圖片的寬高 -- bound邊界 
  100.         mUnSelectedDrawable.setBounds(bounds); 
  101.         mSelectedDrawable.setBounds(bounds); 
  102.         super.onBoundsChange(bounds); 
  103.     } 
  104.   
  105.     /** 
  106.      * 得到Drawable的實際寬高 
  107.      */ 
  108.     @Override 
  109.     public int getIntrinsicWidth() { 
  110.         return mSelectedDrawable.getIntrinsicWidth(); 
  111.     } 
  112.   
  113.     @Override 
  114.     public int getIntrinsicHeight() { 
  115.         return mSelectedDrawable.getIntrinsicHeight(); 
  116.     } 
  117.   
  118.     @Override 
  119.     public void setAlpha(int alpha) { 
  120.   
  121.     } 
  122.   
  123.     @Override 
  124.     public void setColorFilter(ColorFilter cf) { 
  125.   
  126.     } 
  127.   
  128.     @Override 
  129.     public int getOpacity() { 
  130.         return 0
  131.     } 
  132.   

下載地址:http://down.51cto.com/data/2096556

責任編輯:倪明 來源: devstore
相關推薦

2012-04-06 13:52:58

ASP.NET

2011-04-22 11:24:13

mootools

2023-06-07 10:41:43

2025-05-13 00:00:05

2013-10-16 16:17:15

iOS開發優化方案

2014-07-22 10:58:33

HTML5jQuery

2023-05-08 09:08:33

CSS前端

2017-05-03 16:30:38

AndroidScrollView滾動視圖

2015-09-22 10:53:27

引導頁

2023-06-05 09:28:32

CSS漸變

2015-10-20 15:54:16

android源碼滑動關閉

2015-07-17 10:51:01

滑動菜單

2014-12-31 14:52:27

SwipeMenuLiSwipeMenu

2013-06-20 11:10:24

iOS開發UItableView單元格背景漸變

2021-09-01 08:32:13

CSS 技巧@property

2011-07-18 13:06:18

漸變維度數據庫

2023-02-24 08:32:50

CSS漸變屬性

2022-05-27 14:55:34

canvas畫布鴻蒙

2013-06-20 10:50:51

Objective-CiOS左右滑動手勢

2022-10-27 09:13:58

CSSGradient
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 手机三级电影 | 91久久精品国产91久久性色tv | 久久久人| 亚洲成人av | 成人免费区一区二区三区 | 日韩欧美国产精品一区二区 | 国产免费av在线 | aaa国产大片| 在线国产一区二区 | 青草久久免费视频 | 中日韩欧美一级片 | 亚洲精品www久久久 www.蜜桃av | 国产精品精品视频一区二区三区 | 成人九色 | 日韩在线看片 | 成人一级视频在线观看 | 美女视频h| 国产一区二区自拍 | 欧美日韩一区二区视频在线观看 | 亚洲免费精品一区 | 青青草视频免费观看 | 色综合天天综合网国产成人网 | 成年人网站在线观看视频 | 99在线免费观看 | 欧美日韩国产精品一区 | 国产高清在线精品 | 日韩欧美三级电影在线观看 | 狠狠久久久 | 日韩电影a | 人人做人人澡人人爽欧美 | 欧美黄色大片在线观看 | 国产在线高清 | 久久毛片 | 国产高清视频一区 | 国产精品美女久久久久久不卡 | 国产网站在线播放 | 色综合一区二区 | 夜夜爽99久久国产综合精品女不卡 | 亚洲欧洲中文 | 国产一区在线免费 | 久久蜜桃精品 |