高仿網易雲音樂客戶端的Home頁面切換Tabhost-IT藍豹

1.高仿網易雲音樂客戶端的Home頁面切換Tabhost

高仿網易雲音樂客戶端的Home頁面切換Tabhost,並且三角形是透明的,
實現方式,自定義AnimTabsView繼承 RelativeLayout 裏面對當前選中的item 處理 三角形變成透明效果,
即在onDraw 裏面對三角形圖片經行透明度處理,AnimTabsView提供 setOnAnimTabsItemViewChangeListener
方法的onChange()用來監聽點擊切換tabhost.

下面主要是AnimTabsView裏面的onDraw()實現的,部分代碼如下:

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if ((this.mScroller == null) || (!this.mScroller.computeScrollOffset())) {
            this.mLeftDrawRect.set(0, this.mCurrentSlideY, this.mCurrentSlideX, this.mCurrentSlideY + this.mShadow.getHeight());
            canvas.drawBitmap(this.mShadow, null, this.mLeftDrawRect, null);
            this.mRightDrawRect.set(this.mCurrentSlideX + this.mSlideIcon.getWidth(), this.mCurrentSlideY, getWidth(), this.mCurrentSlideY
                    + this.mShadow.getHeight());
            canvas.drawBitmap(this.mShadow, null, this.mRightDrawRect, null);
            canvas.drawBitmap(this.mSlideIcon, this.mCurrentSlideX, this.mCurrentSlideY, null);
            return;
        }
        int scrollX = this.mScroller.getCurrX();
        int scrollY = this.mScroller.getCurrY();
        this.mLeftDrawRect.set(0, scrollY, scrollX, scrollY + this.mShadow.getHeight());
        canvas.drawBitmap(this.mShadow, null, this.mLeftDrawRect, null);
        this.mRightDrawRect.set(scrollX + this.mSlideIcon.getWidth(), scrollY, getWidth(),
                scrollY + this.mShadow.getHeight());
        canvas.drawBitmap(this.mShadow, null, this.mRightDrawRect, null);
        canvas.drawBitmap(this.mSlideIcon, scrollX, scrollY, null);
        invalidate();
    }

運行效果:

 

 

 

2.FlipViewPager 對item實現左右對摺滑動翻頁效果

FlipViewPager 對每一條item實現左右對摺滑動翻頁效果,解決左右滑動和上下滑動的事件分發處理機制。
內部實現如下:用ListView試下,對listview設置adapter,這個adapter繼承BaseFlipAdapter<Friend>
,然後對每一個item進行view處理,部分
代碼如下:
class FriendsAdapter extends BaseFlipAdapter<Friend> {

        private final int PAGES = 3;
        private int[] IDS_INTEREST = {R.id.interest_1, R.id.interest_2, R.id.interest_3, R.id.interest_4, R.id.interest_5};

        public FriendsAdapter(Context context, List<Friend> items, FlipSettings settings) {
            super(context, items, settings);
        }

        @Override
        public View getPage(int position, View convertView, ViewGroup parent, Friend friend1, Friend friend2) {
            final FriendsHolder holder;

            if (convertView == null) {
                holder = new FriendsHolder();
                convertView = getLayoutInflater().inflate(R.layout.friends_merge_page, parent, false);
                holder.leftAvatar = (ImageView) convertView.findViewById(R.id.first);
                holder.rightAvatar = (ImageView) convertView.findViewById(R.id.second);
                holder.infoPage = getLayoutInflater().inflate(R.layout.friends_info, parent, false);
                holder.nickName = (TextView) holder.infoPage.findViewById(R.id.nickname);

                for (int id : IDS_INTEREST)
                    holder.interests.add((TextView) holder.infoPage.findViewById(id));

                convertView.setTag(holder);
            } else {
                holder = (FriendsHolder) convertView.getTag();
            }

            switch (position) {
                // Merged page with 2 friends
                case 1:
                    holder.leftAvatar.setImageResource(friend1.getAvatar());
                    if (friend2 != null)
                        holder.rightAvatar.setImageResource(friend2.getAvatar());
                    break;
                default:
                    fillHolder(holder, position == 0 ? friend1 : friend2);
                    holder.infoPage.setTag(holder);
                    return holder.infoPage;
            }
            return convertView;
        }

        @Override
        public int getPagesCount() {
            return PAGES;
        }

        private void fillHolder(FriendsHolder holder, Friend friend) {
            if (friend == null)
                return;
            Iterator<TextView> iViews = holder.interests.iterator();
            Iterator<String> iInterests = friend.getInterests().iterator();
            while (iViews.hasNext() && iInterests.hasNext())
                iViews.next().setText(iInterests.next());
            holder.infoPage.setBackgroundColor(getResources().getColor(friend.getBackground()));
            holder.nickName.setText(friend.getNickname());
        }

        class FriendsHolder {
            ImageView leftAvatar;
            ImageView rightAvatar;
            View infoPage;

            List<TextView> interests = new ArrayList<>();
            TextView nickName;
        }
    }

 

運行效果:

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章