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

圖片滑動漸變

移動開發(fā)
Android圖片滑動漸變,實現(xiàn)動畫特效。

源碼簡介:Android圖片滑動漸變,實現(xiàn)動畫特效。

源碼效果:

源碼片段:

  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.             // 得到當(dāng)前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, // 目標(biāo)矩形的寬 
  50.                         h, // 目標(biāo)矩形的高 
  51.                         bounds, // 被摳出來的原矩形 
  52.                         r);// 目標(biāo)矩形 -- 最終畫布里面需要的矩形區(qū)域 
  53.   
  54.                 // 保存畫布的原型 
  55.                 canvas.save(); 
  56.                 // 將畫布裁剪一部分出來 
  57.                 canvas.clipRect(r); 
  58.                 mUnSelectedDrawable.draw(canvas); 
  59.                 // 恢復(fù)畫布 
  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, // 目標(biāo)矩形的寬 
  72.                         h, // 目標(biāo)矩形的高 
  73.                         bounds, // 被摳出來的原矩形 
  74.                         r);// 目標(biāo)矩形 -- 最終畫布里面需要的矩形區(qū)域 
  75.   
  76.                 // 保存畫布的原型 
  77.                 canvas.save(); 
  78.                 // 將畫布裁剪一部分出來 
  79.                 canvas.clipRect(r); 
  80.                 mSelectedDrawable.draw(canvas); 
  81.                 // 恢復(fù)畫布 
  82.                 canvas.restore(); 
  83.             } 
  84.         } 
  85.     } 
  86.       
  87.     @Override 
  88.     protected boolean onLevelChange(int level) { 
  89.         // 感知setLevel的調(diào)用,然后刷新 -- draw() 
  90.         invalidateSelf(); 
  91.         return true
  92.     } 
  93.   
  94.     /** 
  95.      * 初始化數(shù)據(jù) 
  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

責(zé)任編輯:倪明 來源: devstore
相關(guān)推薦

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開發(fā)優(yōu)化方案

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

引導(dǎo)頁

2023-06-05 09:28:32

CSS漸變

2015-10-20 15:54:16

android源碼滑動關(guān)閉

2015-07-17 10:51:01

滑動菜單

2014-12-31 14:52:27

SwipeMenuLiSwipeMenu

2013-06-20 11:10:24

iOS開發(fā)UItableView單元格背景漸變

2021-09-01 08:32:13

CSS 技巧@property

2011-07-18 13:06:18

漸變維度數(shù)據(jù)庫

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技術(shù)棧公眾號

主站蜘蛛池模板: 精品久久久久一区二区国产 | 91在线观看视频 | 国精品一区 | 久久精品69 | 国产成人精品一区二区三 | 免费一区 | 精品国产乱码久久久久久影片 | 国产99在线 | 欧美 | 中文字幕精品视频在线观看 | 欧美精品一区二区在线观看 | 国产99久久久国产精品 | 成人久草| 午夜视频在线免费观看 | 亚洲高清在线观看 | 欧美精品一区二区免费视频 | 日本一道本视频 | www.97zyz.com| 亚洲精品欧美精品 | 日韩欧美综合 | 99热在线观看精品 | 亚洲在线一区 | 风间由美一区二区三区在线观看 | 一级午夜aaa免费看三区 | 精品国产一区二区在线 | 伊人二区 | 四虎影院一区二区 | 黄色免费观看 | 91精品久久久久久久久久 | 国产这里只有精品 | 久久精品av | 91亚洲一区 | 黄色网址在线免费观看 | 天堂av资源 | 在线播放一区二区三区 | 欧美在线一区二区三区 | 国产高清在线精品一区二区三区 | 成人毛片视频在线播放 | 亚洲精品99 | 自拍 亚洲 欧美 老师 丝袜 | 亚洲精品中文字幕在线观看 | 在线观看中文字幕 |