最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android開發(fā)仿ios的UIScrollView實(shí)例代碼

 更新時(shí)間:2018年01月20日 12:16:26   作者:馬云飛的博客  
下面小編就為大家分享一篇android開發(fā)仿ios的UIScrollView實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

今天重新裝了編譯器,結(jié)果崩無極限,真是日了狗了了。剛剛才知道問題在哪邊。

好了,說正事,對于ios開發(fā)我沒接觸,不是很了解,百度了半天,差不多就是UIScrollView的把。如果不對,請指證。具體什么效果呢,我剛才拿朋友的iphone手機(jī)看了下,iphone的設(shè)置界面,第一個(gè)列表往下拉可以繼續(xù)滾,上拉同理。不過android好像沒有自帶的這種情況。

我把這種效果稱為滾無極限的scollview。

下面就來上源碼:

首先,最最最重要的就是判斷當(dāng)前視圖是否為空,你空視圖滾不滾好像沒啥區(qū)別,除了android 5.0的scrollview自帶了那種弧度。好像沒什么軟用~~~

//視圖不為空即可滾動(dòng)
  protected void onFinishInflate() {
    if (getChildCount() > 0) {
      childview = getChildAt(0);
    }
  }

這個(gè)屬性我也是剛知道沒多久,意思是當(dāng)所有的布局呈現(xiàn)完成之后調(diào)用這個(gè)方法。

我這邊附上view常用的方法,你們可以自行研究,有好多方法我也不知道~~~.

自定義 View的常用方法:  

onFinishInflate() 當(dāng)View中所有的子控件 均被映射成xml后觸發(fā)   

onMeasure(int, int) 確定所有子元素的大小   

onLayout(boolean, int, int, int, int) 當(dāng)View分配所有的子元素的大小和位置時(shí)觸發(fā)   

onSizeChanged(int, int, int, int) 當(dāng)view的大小發(fā)生變化時(shí)觸發(fā)

onDraw(Canvas) view渲染內(nèi)容的細(xì)節(jié)

onKeyDown(int, KeyEvent) 有按鍵按下后觸發(fā)

onKeyUp(int, KeyEvent) 有按鍵按下后彈起時(shí)觸發(fā)  

onTrackballEvent(MotionEvent) 軌跡球事件

onTouchEvent(MotionEvent)觸屏事件

onFocusChanged(boolean, int, Rect) 當(dāng)View獲取 或失去焦點(diǎn)時(shí)觸發(fā)

onWindowFocusChanged(boolean) 當(dāng)窗口包含的view獲取或失去焦點(diǎn)時(shí)觸發(fā)

onAttachedToWindow() 當(dāng)view被附著到一個(gè)窗口時(shí)觸發(fā)

onDetachedFromWindow() 當(dāng)view離開附著的窗口時(shí)觸發(fā),提示該方法和 onAttachedToWindow() 是相反的。   

onWindowVisibilityChanged(int) 當(dāng)窗口中包含的可見的view發(fā)生變化時(shí)觸發(fā)

以上是View實(shí)現(xiàn)的一些基本接口的回調(diào)方法,一般我們需要處理畫布的顯示時(shí),重寫onDraw(Canvas)用的的是最多的。

接下來就是ontouch事件來判斷位移和回彈的效果啦:

if (childview != null) {
      int action = event.getAction();
      switch (action) {
        case MotionEvent.ACTION_DOWN:
          break;
        case MotionEvent.ACTION_UP:
          //判斷是否需要?jiǎng)赢?
          if (!normal.isEmpty()) {
            animation();
            isCount = false;
          }
          break;
        case MotionEvent.ACTION_MOVE:
          final float DownY = startY;
          float moveY = event.getY();
          int distance = (int) (DownY - moveY);
          if (!isCount) {
            distance = 0; // 在這里要?dú)w0.
          }
          startY = moveY;
          if (isNeedMove()) {
            //頂部
            if (normal.isEmpty()) {
              normal.set(childview.getLeft(), childview.getTop(),
                  childview.getRight(), childview.getBottom());
            }
            //底部
            childview.layout(childview.getLeft(), childview.getTop() - distance / 2,
                childview.getRight(), childview.getBottom() - distance / 2);
          }
          isCount = true;
          break;
      }

后面就是判斷是否需要滾動(dòng)和回彈的動(dòng)畫效果了。

 public void animation() {
    // 開啟移動(dòng)動(dòng)畫
    TranslateAnimation animation = new TranslateAnimation(0, 0, childview.getTop(),
        normal.top);
    animation.setDuration(200);
    childview.startAnimation(animation);
    // 設(shè)置回到正常的布局位置
    childview.layout(normal.left, normal.top, normal.right, normal.bottom);
    normal.setEmpty();
  }
 public boolean isNeedMove() {
    int offset = childview.getHeight() - getHeight();
    int scrollY = getScrollY();
    // 0是頂部,后面那個(gè)是底部
    if (scrollY == 0 || scrollY == offset) {
      return true;
    }
    return false;
  }

好了,一個(gè)滾,滾,滾,滾無極限的scrollview就誕生了。其實(shí)我感覺這個(gè)實(shí)用性不是很大,看個(gè)人需求了。其實(shí)也是蠻好玩的~

以上這篇android開發(fā)仿ios的UIScrollView實(shí)例代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

勃利县| 酒泉市| 怀来县| 裕民县| 嘉禾县| 兴仁县| 平阳县| 旺苍县| 和林格尔县| 颍上县| 简阳市| 莱西市| 米林县| 贵德县| 荆州市| 精河县| 英吉沙县| 溆浦县| 兴安县| 清苑县| 龙游县| 扶沟县| 崇阳县| 荥经县| 泰和县| 承德市| 墨江| 剑河县| 稻城县| 威海市| 岳阳市| 安国市| 邵武市| 法库县| 托克逊县| 德江县| 保山市| 建湖县| 黎城县| 鸡东县| 陕西省|