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

仿QQ空間可拉伸頭部

移動開發(fā)
仿QQ空間可拉伸頭部,經(jīng)典好用,值得一試。

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

源碼效果:

源碼片段:

  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.      * 設(shè)置拉伸的圖片 
  28.      *  
  29.      * @param imageView 
  30.      */ 
  31.     public void setParallaxImageView(ImageView imageView) { 
  32.         this.mImageView = imageView; 
  33.         // 設(shè)置伸縮類型 -- 居中填充 
  34.         this.mImageView.setScaleType(ScaleType.CENTER_CROP); 
  35.     } 
  36.   
  37.     /** 
  38.      * 初始化圖片加載進(jìn)來最初的高度 
  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.      * 滑動過頭的時候回調(diào) 
  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.      *  監(jiān)聽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.         // 下拉的過程當(dāng)中,不斷地控制ImageView的高度 
  91.         /** 
  92.          * deltaY:是在超出滑動的時候每毫秒滑動的距離 -- 增量 (-往下拉過渡,+往上拉過渡) 大小:根據(jù)用戶滑動的速度決定 一般滑動的速度 
  93.          * -50~50 
  94.          */ 
  95.         if (deltaY < 0) { 
  96.             // 下拉過渡,不斷增加ImageView的高度,deltay是負(fù)數(shù),增加高度就是減去 
  97.             mImageView.getLayoutParams().height = mImageView.getHeight() 
  98.                     - deltaY; 
  99.             // View重新調(diào)整寬高 
  100.             mImageView.requestLayout(); // onMeasure-->onLayout 
  101.         } else { 
  102.             // 上拉過渡,不斷減小ImageView的高度,deltay是正數(shù),減小高度還是減去 
  103.             if (mImageView.getHeight()>mImageViewHeight) { 
  104.                 mImageView.getLayoutParams().height = Math.max( 
  105.                         mImageView.getHeight() - deltaY, mImageViewHeight); 
  106.                 // View重新調(diào)整寬高 
  107.                 mImageView.requestLayout(); // onMeasure-->onLayout 
  108.             } 
  109.               
  110.         } 
  111.   
  112.         return false
  113.     } 
  114.       
  115.     /** 
  116.      * 監(jiān)聽觸摸 -- 松開手 
  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.         // 動畫執(zhí)行前的高度 
  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.          * 動畫不斷地執(zhí)行的時候會回調(diào)該方法 
  152.          * interpolatedTime:范圍是0 
  153.          * 0ms-------------->300ms 
  154.          * 當(dāng)前的圖片高度--->動畫執(zhí)行之前的高度-高度差*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

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

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

電子皮膚中科院皮膚

2013-07-24 18:34:59

iOS圖片拉伸iOS開發(fā)學(xué)習(xí)resizableIm

2017-05-02 09:34:49

QQ空間

2017-05-02 09:51:39

QQ空間

2017-05-27 13:03:28

互聯(lián)網(wǎng)

2015-04-28 13:34:52

phpqq空間發(fā)表文章

2012-12-25 13:16:56

AndroidQQ2012UI

2015-07-22 10:45:02

QQ數(shù)據(jù)大數(shù)據(jù)分析數(shù)據(jù)泄露

2013-09-02 15:04:25

QQ高仿版GG嘰嘰

2013-08-15 10:09:39

紅米手機QQ空間大數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品一二三区 | 成人福利 | 夜夜夜夜草 | 欧美精品在线免费观看 | 亚洲成人一级片 | 一区二区免费 | 99re在线视频免费观看 | 懂色tv| 精品视频一区二区三区在线观看 | 亚洲高清视频在线观看 | 日韩免费网站 | 免费观看国产视频在线 | 久久夜色精品国产 | 精品视频在线免费观看 | 精品国产乱码久久久久久丨区2区 | 国产区在线观看 | 国产成人精品一区二区三区四区 | 一区二区国产在线观看 | 欧美视频区 | 日韩av免费在线电影 | a级毛片免费高清视频 | 日本91av视频 | 国产毛片视频 | 91久久网站 | 精品日韩| 国产精品久久久久一区二区三区 | 成人激情免费视频 | 特级做a爰片毛片免费看108 | 中文字幕av在线一二三区 | 亚洲欧美视频 | 欧美日韩综合一区 | 国产剧情一区 | 一区二区三区四区视频 | 欧美一二三| www.国产精品 | 美女福利视频网站 | 一区二区精品 | 日韩三级 | 性色av一区二区三区 | 精品一区二区三区视频在线观看 | 亚洲免费三区 |