3D縮水過濾工具 手機版

360手機助手,應用寶等應用市場搜尋“3D過濾器”可以下載。

下面來點乾貨,同一頁面不使用viewpager自動漸變輪換。

<?xml version=”1.0″ encoding=”utf-8″?>
<FrameLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:background=”@drawable/bg_unlock” >

    <!– 第一頁 –>

    <LinearLayout
        android:id=”@ id/one_bg”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:background=”@drawable/bg_unlock”
        android:orientation=”vertical” >
    </LinearLayout>
    <!– 第二頁 –>

    <LinearLayout
        android:id=”@ id/two_bg”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:background=”@drawable/guide_two_bg”
        android:orientation=”vertical” >
    </LinearLayout>
 

    <!– 第一頁 –>

    <RelativeLayout
        android:id=”@ id/guide_one”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:layout_marginBottom=”100dp”
        android:gravity=”center” >

        <View
            android:id=”@ id/icon”
            android:layout_width=”100dp”
            android:layout_height=”100dp”
            android:layout_centerHorizontal=”true”
            android:background=”@drawable/ic_launcher” />

        <TextView
            android:id=”@ id/app_name”
            android:layout_width=”fill_parent”
            android:layout_height=”40dp”
            android:layout_below=”@id/icon”
            android:layout_marginTop=”30dp”
            android:gravity=”center”
            android:text=”@string/app_name”
            android:textColor=”#ffffff”
            android:textSize=”25sp” />

        <TextView
            android:id=”@ id/version”
            android:layout_width=”fill_parent”
            android:layout_height=”20dp”
            android:layout_below=”@id/app_name”
            android:gravity=”center”
            android:text=”第一頁”
            android:textColor=”#ffffff”
            android:textSize=”15sp” />

        <View
            android:id=”@ id/wearcare”
            android:layout_width=”170.64dp”
            android:layout_height=”43.92dp”
            android:layout_below=”@id/version”
            android:layout_centerHorizontal=”true”
            android:layout_marginTop=”10dp”
            android:background=”@drawable/wearcare” />
    </RelativeLayout>

    <!– 第二頁 –>

    <RelativeLayout
        android:id=”@ id/guide_two”
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:layout_marginBottom=”100dp”
        android:gravity=”center” >

        <View
            android:id=”@ id/icon1″
            android:layout_width=”100dp”
            android:layout_height=”100dp”
            android:layout_centerHorizontal=”true”
            android:background=”@drawable/bbt” />

        <TextView
            android:id=”@ id/app_name1″
            android:layout_width=”fill_parent”
            android:layout_height=”40dp”
            android:layout_below=”@id/icon1″
            android:layout_marginTop=”30dp”
            android:gravity=”center”
            android:text=”第二頁”
            android:textColor=”#ffffff”
            android:textSize=”25sp” />
    </RelativeLayout>
  

</FrameLayout>

請看程式碼,主要是使用層次佈局FrameLayout,demo只寫了兩個層次的輪換

接下來上程式碼部分。

首先是動畫控制程式碼

out_righttoleft_dao.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<set xmlns:android=”http://schemas.android.com/apk/res/android” >

    <!– 定義從右向左滑動時,當前頁出去的動畫 –>
    <translate
        android:duration=”1000″
        android:fromXDelta=”0″
        android:toXDelta=”-100%” />

</set>

in_righttoleft_dao.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<set xmlns:android=”http://schemas.android.com/apk/res/android” >

    <!– 定義從右向左滑動時,後一頁進入的動畫 –>
    <translate
        android:duration=”1000″
        android:fromXDelta=”100%”
        android:toXDelta=”0″ />

</set>

然後是activity部分程式碼:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityStack.popAllActivityExceptOne(null);
// ActivityStack.popActivity(this);
setContentView(R.layout.activity_guide);
init();
initHandler();
initView();
loadView();
}

protected void init() {
activity = this;
mTimer = new Timer();
mBackground = new LinearLayout[2];
mGuideLayouts = new RelativeLayout[2];
out = AnimationUtils.loadAnimation(this, R.anim.out_righttoleft_dao);
in = AnimationUtils.loadAnimation(this, R.anim.in_righttoleft_dao);
}

protected void initHandler() {
super.initHandler();
handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
mGuideLayouts[mNowPostion1].startAnimation(out);
mGuideLayouts[mNowPostion2].startAnimation(in);
mGuideLayouts[mNowPostion1].setVisibility(View.GONE);
mGuideLayouts[mNowPostion2].setVisibility(View.VISIBLE);
postion ;
loadView();
break;
case 1:
crossfade(postion);
break;
default:
break;
}
}
};
}

protected void initView() {
int[] bg = new int[] { R.id.one_bg, R.id.two_bg};
int[] guide = new int[] { R.id.guide_one, R.id.guide_two };
for (int i = 0; i < 2; i ) {
mBackground[i] = (LinearLayout) findViewById(bg[i]);
mGuideLayouts[i] = (RelativeLayout) findViewById(guide[i]);
if (i != 0) {
mBackground[i].setVisibility(View.GONE);
mGuideLayouts[i].setVisibility(View.GONE);
}
}

}

@SuppressLint(“NewApi”)
private void crossfade(final int postion) {
mNowPostion1 = postion % 2;
if (mNowPostion1 == 1) {
mNowPostion2 = 0;
} else {
mNowPostion2 = mNowPostion1 1;
}
mBackground[mNowPostion2].setAlpha(0f);
mBackground[mNowPostion2].setVisibility(View.VISIBLE);
mBackground[mNowPostion2].animate().alpha(1f).setDuration(mShortAnimationDuration).setListener(null);
mBackground[mNowPostion1].animate().alpha(0f).setDuration(mShortAnimationDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mBackground[mNowPostion1].setVisibility(View.GONE);
}

public void onAnimationStart(Animator animation) {
sendMsg(0, null);
}
});
}

protected void loadView() {
// 休眠5秒。
if (task != null) {
task = null;
}
task = new TimerTask() {
public void run() {
sendMsg(1, null);
}
};
mTimer.schedule(task, TimeInterval);
}

最後當然就是效果圖了

不過由於專案問題,所以圖片p了一下,各位湊合看一下效果。