日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android實現(xiàn)仿魅族日歷首頁功能的方法

小編給大家分享一下Android實現(xiàn)仿魅族日歷首頁功能的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比崇陽網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式崇陽網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋崇陽地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。

flyme5.0增加了很多優(yōu)美的動畫和交互,界面也變得相當精致。我手頭現(xiàn)在就用著魅族MX5,感覺還不錯哇!經(jīng)常會打開它的日歷看計劃等,感覺它首頁的滑動效果還不錯,就試著實現(xiàn)一把。

Android實現(xiàn)仿魅族日歷首頁功能的方法

效果分析

1 該首頁由兩部分組成:GridView展示的日歷視圖,下方的內(nèi)容視圖

2 當選中日歷的某一天后,向上滑動,內(nèi)容視圖會不斷的向上移動,直到只含有選中日期的那一行顯示為止

3 伴隨著內(nèi)容視圖向上移動,日歷視圖也會跟隨向上移動

4 還有一個效果該圖沒能體現(xiàn):當為向上滑動,松手后,視圖會自動向上隱藏;當為向上滑動時,松手后,視圖會自動向下展開

實現(xiàn)邏輯

該view繼承LinearLayout,日歷視圖和內(nèi)容視圖上下放置

1 寬高計算

// 內(nèi)容視圖的實際高度為該控件高度減去gridview一行的高度
// 這個不難得出結(jié)論,因為向上移動時,內(nèi)容視圖可以移動直到只含有選中日期的那一行顯示為止
int heightSpec = MeasureSpec.makeMeasureSpec(
    getMeasuredHeight() - Tool.dip2px(mContext, 60),
    MeasureSpec.EXACTLY);
contentView.measure(widthMeasureSpec, heightSpec);

2 獲取可滑動的距離

// 當視圖大小發(fā)生變化時,會回調(diào)該方法,可在這個方法獲取GridView的高度
// 而內(nèi)容視圖可滑動的距離就是:GridView的高度減去其一行的高度
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
 super.onSizeChanged(w, h, oldw, oldh);
 swipHeight = gridView.getMeasuredHeight() - Tool.dip2px(mContext, 60);
}

3 事件處理

3.1 事件攔截

// 有兩種情況需要攔截:
1 向上滑動,并且contentView還沒達到最大的滑動距離時
2 向下滑動,并且contentView還沒有滑動到到底時
case MotionEvent.ACTION_MOVE:
  float dy = y - mLastY;
  if (Math.abs(dy) > mTouchSlop) {
   if ((dy > 0 && contentView.getTranslationY() <= 0)
      || (dy < 0 && contentView.getTranslationY() >= -swipHeight)) {
    mLastY = y;
    return true;
   }
  }
  break;

3.2 onTouchEvent的處理

case MotionEvent.ACTION_MOVE:
 float dy = y - mLastY;
 // 邊界的判斷,保證下滑只能移動到原來的位置
 if (dy > 0 && contentView.getTranslationY() + dy >= 0) {
  contentView.setTranslationY(0);
  translationSwipView();
  return true;
 }
 // 邊界的判斷,保證移動的位置最大為可滑動距離
 if (dy < 0 && contentView.getTranslationY() + dy <= -swipHeight) {
  contentView.setTranslationY(-swipHeight);
  translationSwipView();
  return true;
 }
 // 根據(jù)滑動的距離,移動contentView
 contentView.setTranslationY(contentView.getTranslationY() + dy);
 // 主要是讓日歷視圖伴隨contentView的移動而發(fā)生偏移
 translationSwipView();
 mLastY = y;
 break;

3.3 日歷視圖的偏移

// 通過內(nèi)容視圖滑動的比例,計算出日歷視圖需要移動的距離,并進行移動(保證等比移動)
private void translationSwipView() {
 float percent = contentView.getTranslationY() * 1.0f / swipHeight;
 gridView.setTranslationY(translatDirection * percent);
}

3.4 ACTION_UP事件處理

case MotionEvent.ACTION_UP:
 // 假如已經(jīng)是隱藏狀態(tài)或者是顯示狀態(tài),不用處理
 if (contentView.getTranslationY() == 0
     || contentView.getTranslationY() == swipHeight) {
  break;
 }
 // 假如松手的坐標比ACTION_DOWN的坐標要大,證明是向下滑動,通過動畫顯示日歷視圖
 if (event.getY() - downY > 0) {
  animateShow();
 } else {
 // 假如松手的坐標比ACTION_DOWN的坐標要小,證明是向上滑動,通過動畫隱藏日歷視圖
  animateHide();
 }
 break;
}

3.5 對外處理

// 通過該方法通知該view,日歷視圖選擇的item為哪個,通過這個設(shè)置計算出日歷視圖需要移動的距離
public void setSelectPosition(int selectPosition) {
 int line = (selectPosition + 7) / 7;
 translatDirection = (line - 1) * Tool.dip2px(mContext, 60);
}

以上是“Android實現(xiàn)仿魅族日歷首頁功能的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁名稱:Android實現(xiàn)仿魅族日歷首頁功能的方法
當前地址:http://www.dlmjj.cn/article/isjdjj.html