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

仿QQ空間可拉伸頭部

移動開發
仿QQ空間可拉伸頭部,經典好用,值得一試。

源碼簡介:仿QQ空間可拉伸頭部,經典好用,值得一試。

源碼效果:

源碼片段:

  1. package com.example.tz_demo_6_27; 
  2.   
  3. import android.content.Context; 
  4. import android.util.AttributeSet; 
  5. import android.view.MotionEvent; 
  6. import android.view.View; 
  7. import android.view.animation.Animation; 
  8. import android.view.animation.Transformation; 
  9. import android.widget.ImageView; 
  10. import android.widget.ImageView.ScaleType; 
  11. import android.widget.ListView; 
  12.   
  13. public class ParallaxListView extends ListView { 
  14.   
  15.     private ImageView mImageView; 
  16.     // 初始高度 
  17.     private int mImageViewHeight = -1
  18.     // ***拉伸高度 
  19.     private int mDrawableMaxHeight = -1
  20.   
  21.     public ParallaxListView(Context context, AttributeSet attrs) { 
  22.         super(context, attrs); 
  23.   
  24.     } 
  25.   
  26.     /** 
  27.      * 設置拉伸的圖片 
  28.      *  
  29.      * @param imageView 
  30.      */ 
  31.     public void setParallaxImageView(ImageView imageView) { 
  32.         this.mImageView = imageView; 
  33.         // 設置伸縮類型 -- 居中填充 
  34.         this.mImageView.setScaleType(ScaleType.CENTER_CROP); 
  35.     } 
  36.   
  37.     /** 
  38.      * 初始化圖片加載進來最初的高度 
  39.      *  
  40.      */ 
  41.     public void setViewBounds() { 
  42.         if (mImageViewHeight == -1) { 
  43.             mImageViewHeight = mImageView.getHeight(); 
  44.             if (mImageViewHeight < 0) { 
  45.                 mImageViewHeight = getContext().getResources() 
  46.                         .getDimensionPixelSize(R.dimen.size_default); 
  47.             } 
  48.         } 
  49.   
  50.     } 
  51.   
  52.     /** 
  53.      * 滑動過頭的時候回調 
  54.      */ 
  55.     @Override 
  56.     protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, 
  57.             int scrollY, int scrollRangeX, int scrollRangeY, 
  58.             int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { 
  59.         // 控制ImageView的高度不斷增加 
  60.         boolean isCollapse = resizeOverScrollBy(deltaY); 
  61.   
  62.         // return true:下拉到邊界的某個地方的時候不再往下拉 
  63.         return isCollapse ? true : super.overScrollBy(deltaX, deltaY, scrollX, 
  64.                 scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, 
  65.                 maxOverScrollY, isTouchEvent); 
  66.     } 
  67.   
  68.     /** 
  69.      *  監聽ListView滑動 
  70.      */ 
  71.     @Override 
  72.     protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
  73.         super.onScrollChanged(l, t, oldl, oldt); 
  74.         // 獲得ImageView的父控件 
  75.         View header = (View) mImageView.getParent(); 
  76.         if (header.getTop() < 0 && mImageView.getHeight() > mImageViewHeight) { 
  77.             // 減小ImageView的高度 -- 不能超過圖片最原始的高度 
  78.             mImageView.getLayoutParams().height = Math.max( 
  79.                     mImageView.getHeight() + header.getTop(), mImageViewHeight); 
  80.             // ImageView所在的容器的高度也要變化:getTop--->0 
  81.             header.layout(header.getLeft(), 0, header.getRight(), 
  82.                     header.getHeight()); 
  83.             mImageView.requestLayout(); 
  84.         } 
  85.   
  86.     } 
  87.       
  88.   
  89.     private boolean resizeOverScrollBy(int deltaY) { 
  90.         // 下拉的過程當中,不斷地控制ImageView的高度 
  91.         /** 
  92.          * deltaY:是在超出滑動的時候每毫秒滑動的距離 -- 增量 (-往下拉過渡,+往上拉過渡) 大小:根據用戶滑動的速度決定 一般滑動的速度 
  93.          * -50~50 
  94.          */ 
  95.         if (deltaY < 0) { 
  96.             // 下拉過渡,不斷增加ImageView的高度,deltay是負數,增加高度就是減去 
  97.             mImageView.getLayoutParams().height = mImageView.getHeight() 
  98.                     - deltaY; 
  99.             // View重新調整寬高 
  100.             mImageView.requestLayout(); // onMeasure-->onLayout 
  101.         } else { 
  102.             // 上拉過渡,不斷減小ImageView的高度,deltay是正數,減小高度還是減去 
  103.             if (mImageView.getHeight()>mImageViewHeight) { 
  104.                 mImageView.getLayoutParams().height = Math.max( 
  105.                         mImageView.getHeight() - deltaY, mImageViewHeight); 
  106.                 // View重新調整寬高 
  107.                 mImageView.requestLayout(); // onMeasure-->onLayout 
  108.             } 
  109.               
  110.         } 
  111.   
  112.         return false
  113.     } 
  114.       
  115.     /** 
  116.      * 監聽觸摸 -- 松開手 
  117.      */ 
  118.     @Override 
  119.     public boolean onTouchEvent(MotionEvent ev) { 
  120.         // 判斷 
  121.         if (ev.getAction()== MotionEvent.ACTION_UP) { 
  122.             // 開啟回彈的動畫 
  123.             ResetAnimation animation=new ResetAnimation(mImageView,mImageViewHeight); 
  124.             animation.setDuration(300); 
  125.             mImageView.startAnimation(animation); 
  126.         } 
  127.           
  128.         return super.onTouchEvent(ev); 
  129.     } 
  130.       
  131.     public class ResetAnimation extends Animation{ 
  132.           
  133.           
  134.           
  135.         private ImageView mView; 
  136.           
  137.         private int targetHeight; 
  138.         // 動畫執行前的高度 
  139.         private int originalHeight; 
  140.         // 高度差 
  141.         private int extraHeight; 
  142.   
  143.         public ResetAnimation(ImageView mImageView,int targetHeight) { 
  144.             this.mView=mImageView; 
  145.             this.targetHeight=targetHeight; 
  146.             this.originalHeight=mImageView.getHeight(); 
  147.             extraHeight=originalHeight-targetHeight; 
  148.         } 
  149.           
  150.         /** 
  151.          * 動畫不斷地執行的時候會回調該方法 
  152.          * interpolatedTime:范圍是0 
  153.          * 0ms-------------->300ms 
  154.          * 當前的圖片高度--->動畫執行之前的高度-高度差*interpolatedTime 
  155.          * extraHeight------>0 
  156.          */ 
  157.         @Override 
  158.         protected void applyTransformation(float interpolatedTime, 
  159.                 Transformation t) { 
  160.               
  161.             mView.getLayoutParams().height=(int) (originalHeight-extraHeight*interpolatedTime); 
  162.             mView.requestLayout(); 
  163.             super.applyTransformation(interpolatedTime, t); 
  164.         } 
  165.     } 
  166.   

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

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

2015-08-07 15:32:19

歡迎界面仿微信仿qq空間

2022-05-26 00:06:19

CSSFirefoxElectron

2017-05-03 16:30:38

AndroidScrollView滾動視圖

2015-09-07 10:57:38

qq未讀消息

2015-03-31 18:13:09

swipelistvi

2015-01-19 12:19:04

iOS源碼ActionSheet仿QQ音樂

2009-05-22 10:11:19

2018-12-18 13:41:40

2015-10-27 11:14:03

qq騰訊95后

2017-05-02 09:12:20

QQ空間

2017-06-08 11:23:24

電子皮膚中科院皮膚

2017-05-02 09:34:49

QQ空間

2017-05-02 09:51:39

QQ空間

2013-07-24 18:34:59

iOS圖片拉伸iOS開發學習resizableIm

2015-04-28 13:34:52

phpqq空間發表文章

2012-12-25 13:16:56

AndroidQQ2012UI

2017-05-27 13:03:28

互聯網

2015-07-22 10:45:02

QQ數據大數據分析數據泄露

2013-09-02 15:04:25

QQ高仿版GG嘰嘰

2013-08-15 10:09:39

紅米手機QQ空間大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97色伦网 | 亚洲激情一区二区三区 | 免费在线观看一区二区 | 国产精品国产成人国产三级 | 97国产爽爽爽久久久 | 99免费在线视频 | 亚洲视频在线看 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产91中文 | 狠狠久久综合 | 99色综合| 在线一区| 成人网av| 亚洲精品第一 | 久久久久免费精品国产小说色大师 | 色综合久久久久 | 精品欧美一区二区精品久久久 | 国产精品99久久久久久久vr | 成人免费一区二区三区视频网站 | 日韩av一区二区在线观看 | 天天干在线播放 | 操操日 | 国产精品美女久久久久aⅴ国产馆 | 久久三级影院 | 国产香蕉视频 | 一区二区三区精品视频 | 成人免费大片黄在线播放 | 看特级黄色片 | 97精品国产97久久久久久免费 | www.se91| 久久精品超碰 | 97精品国产97久久久久久免费 | 久久国产综合 | 亚洲一区二区视频在线播放 | 亚洲欧美在线观看 | 你懂的在线视频播放 | 爱爱视频在线观看 | 99re6在线视频精品免费 | 在线亚洲一区二区 | 色吊丝在线 | 国产精久久久久久 |