ICSLauncher改造-替换滑屏Indicator

来源:互联网 发布:ad7606 Linux 335x 编辑:程序博客网 时间:2024/06/07 17:39

背景:

原生ICS 已经有一种通过9patch拉伸实现的scrollIndicator但是不够美观,本文就在不修改原生scrollindicator的基础上添加新的冒泡scrollindicator。

效果图如下。实现思路很简单,见正文。


1.添加View对象

1.1 AppScreenBubbleViewFrameLayout extends FrameLayout

每一个“点”是一个AppScreenBubbleViewFrameLayout,它有两个成员变量,imageViewFront、imageViewBack,当前页显示imageViewFront,其他页显示imageViewBack。

1.2 AppScreenBubbleViewFrameLayout extends FrameLayout

          
 for (int page = 0; page < totalPages; ++page) {            LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,                    LayoutParams.WRAP_CONTENT);            AppScreenBubbleViewFrameLayout appScreenBubbleViewFrameLayout = new AppScreenBubbleViewFrameLayout(                    mContext);            if (page == mCurrentPage) {                appScreenBubbleViewFrameLayout.getImageViewFront()                        .setImageDrawable(getFocusDrawable());            }            else {                appScreenBubbleViewFrameLayout.getImageViewFront()                        .setImageDrawable(getNormalDrawable());            }            this.addView(appScreenBubbleViewFrameLayout, layoutParams);        }

1.2添加AppScreenBubbleViewFrameLayout布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher"android:layout_width="fill_parent" android:layout_height="wrap_content"android:scaleType="center" android:layout_gravity="bottom|center_horizontal"launcher:direction="horizontal"><com.android.launcher2.AppScreenBubbleViewandroid:id="@+id/drawer_appscreen_num" android:layout_width="match_parent"android:layout_height="wrap_content" android:gravity="center_horizontal"/></LinearLayout>



2.合入Launcher

2.1在Laucher.xml中添加如下布局

    <!-- add bubble view -->     <include layout="@layout/workspace_bubble_view_layout"        android:id="@+id/bubbleView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="bottom"        android:layout_marginBottom="@dimen/button_bar_height"/>

2.2.在Laucher.java中初始化

      //add bubbleView to Workspace       View bubbleView = mDragLayer.findViewById(R.id.bubbleView);       mScreenBubbleView = (AppScreenBubbleView) bubbleView.findViewById(R.id.drawer_appscreen_num);       mWorkspace.setAppScreenBubbleView(mScreenBubbleView);       //mScreenBubbleView.show       mWorkspace.showScreenBubbleView(false);

3.PagedView

     注意学习动画得使用啊,亲!
protected void showScreenBubbleView(boolean immediately){        if (getChildCount() <= 1) return;        if(!isScreenBubbleEnable()) return;        getScreenBubbleView();        if(mScreenBubbleView != null){            updateScreenPosition();            mScreenBubbleView.setVisibility(View.VISIBLE);            if (immediately) {                mScreenBubbleView.setAlpha(1f);            }            else{                mScreenBubbleViewAnimator = ObjectAnimator.ofFloat(mScreenBubbleView, "alpha", 1f);                mScreenBubbleViewAnimator.setDuration(sScreenBubbleFadeInDuration);                mScreenBubbleViewAnimator.start();            }        }    }
 // a method that subclasses can override to add behavior    protected void onPageBeginMoving() {        showScrollingIndicator(false);        showScreenBubbleView(false);    }


原创粉丝点击