国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android ScrollView實(shí)現(xiàn)反彈效果的實(shí)例

2019-12-12 02:25:23
字體:
供稿:網(wǎng)友

 Android ScrollView實(shí)現(xiàn)反彈效果

自定義ScrollView控件:

/**  * ScrollView反彈效果的實(shí)現(xiàn)  */ public class BounceScrollView extends ScrollView {   private View inner;// 孩子View    private float y;// 點(diǎn)擊時y坐標(biāo)    private Rect normal = new Rect();// 矩形(這里只是個形式,只是用于判斷是否需要動畫.)    private boolean isCount = false;// 是否開始計算    public BounceScrollView(Context context, AttributeSet attrs) {     super(context, attrs);   }    /***    * 根據(jù) XML 生成視圖工作完成.該函數(shù)在生成視圖的最后調(diào)用,在所有子視圖添加完之后. 即使子類覆蓋了 onFinishInflate    * 方法,也應(yīng)該調(diào)用父類的方法,使該方法得以執(zhí)行.    */   @Override   protected void onFinishInflate() {     if (getChildCount() > 0) {       inner = getChildAt(0);     }   }    /***    * 監(jiān)聽touch    */   @Override   public boolean onTouchEvent(MotionEvent ev) {     if (inner != null) {       commOnTouchEvent(ev);     }      return super.onTouchEvent(ev);   }    /***    * 觸摸事件    *    * @param ev    */   public void commOnTouchEvent(MotionEvent ev) {     int action = ev.getAction();     switch (action) {     case MotionEvent.ACTION_DOWN:       break;     case MotionEvent.ACTION_UP:       // 手指松開.       if (isNeedAnimation()) {         animation();         isCount = false;       }       break;     /***      * 排除出第一次移動計算,因?yàn)榈谝淮螣o法得知y坐標(biāo), 在MotionEvent.ACTION_DOWN中獲取不到,      * 因?yàn)榇藭r是MyScrollView的touch事件傳遞到到了LIstView的孩子item上面.所以從第二次計算開始.      * 然而我們也要進(jìn)行初始化,就是第一次移動的時候讓滑動距離歸0. 之后記錄準(zhǔn)確了就正常執(zhí)行.      */     case MotionEvent.ACTION_MOVE:       final float preY = y;// 按下時的y坐標(biāo)       float nowY = ev.getY();// 時時y坐標(biāo)       int deltaY = (int) (preY - nowY);// 滑動距離       if (!isCount) {         deltaY = 0; // 在這里要?dú)w0.       }        y = nowY;       // 當(dāng)滾動到最上或者最下時就不會再滾動,這時移動布局       if (isNeedMove()) {         // 初始化頭部矩形         if (normal.isEmpty()) {           // 保存正常的布局位置           normal.set(inner.getLeft(), inner.getTop(),               inner.getRight(), inner.getBottom());         }         Log.e("jj", "矩形:" + inner.getLeft() + "," + inner.getTop()             + "," + inner.getRight() + "," + inner.getBottom());         // 移動布局         inner.layout(inner.getLeft(), inner.getTop() - deltaY / 2,             inner.getRight(), inner.getBottom() - deltaY / 2);       }       isCount = true;       break;      default:       break;     }   }    /***    * 回縮動畫    */   public void animation() {     // 開啟移動動畫     TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(),         normal.top);     ta.setDuration(200);     inner.startAnimation(ta);     // 設(shè)置回到正常的布局位置     inner.layout(normal.left, normal.top, normal.right, normal.bottom);      Log.e("jj", "回歸:" + normal.left + "," + normal.top + "," + normal.right         + "," + normal.bottom);      normal.setEmpty();    }    // 是否需要開啟動畫   public boolean isNeedAnimation() {     return !normal.isEmpty();   }    /***    * 是否需要移動布局 inner.getMeasuredHeight():獲取的是控件的總高度    *    * getHeight():獲取的是屏幕的高度    *    * @return    */   public boolean isNeedMove() {     int offset = inner.getMeasuredHeight() - getHeight();     int scrollY = getScrollY();     Log.e("jj", "scrolly=" + scrollY);     // 0是頂部,后面那個是底部     if (scrollY == 0 || scrollY == offset) {       return true;     }     return false;   }  } 

實(shí)現(xiàn)反彈效果:

<com.techrare.view.BounceScrollView     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:background="@color/tab_chart_bg"     android:scrollbars="none" >      <LinearLayout       android:layout_width="fill_parent"       android:layout_height="match_parent"       android:gravity="center_horizontal"       android:orientation="vertical"       android:paddingLeft="20dp"       android:paddingRight="20dp" > <span style="white-space:pre">   </span><!-- 這里可以盡情的布局 -->     </LinearLayout> </com.techrare.view.BounceScrollView> 

以上就是 Android ScrollView實(shí)現(xiàn)反彈效果的實(shí)例的講解,本站關(guān)于Android開發(fā)的文章還有很多,歡迎大家搜索查閱,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 开化县| 临城县| 辽源市| 上林县| 卫辉市| 静宁县| 舟曲县| 平湖市| 山东省| 绥滨县| 陈巴尔虎旗| 凤庆县| 新营市| 石家庄市| 手机| 全椒县| 韶山市| 新绛县| 阿拉善右旗| 红安县| 将乐县| 金寨县| 尉犁县| 孟村| 霸州市| 平昌县| 赤城县| 长春市| 盖州市| 桦甸市| 越西县| 武功县| 杭锦旗| 林芝县| 拉萨市| 龙陵县| 庆阳市| 双峰县| 九寨沟县| 金昌市| 西安市|