【Android UI設計與開發】10:滑動菜單欄(二)SlidingMenu 動畫效果的實現


其實就是在顯示菜單欄時,有個動畫的效果。代碼比較簡單,下面進行說明。

1.效果圖如下,手機上查看效果更佳

 

2.代碼實現,這里只講解動畫效果的實現,具體代碼可在源代碼中查看

<1> 先定義一個CanvasTransformer接口對象,這個接口是在slidingmenu_library類庫中封裝好的

private CanvasTransformer mTransformer; 

<2> 然后再實例化此接口,重寫接口中的方法,例如示例1中的方法:

/**
         * transformCanvas(Canvas canvas, float percentOpen) 
         * ① Canvas  canvas:畫布類; 
         * ② float percentOpen:滑動菜單欄打開時的百分比值。
         */
        mTransformer = new CanvasTransformer() {
            @Override
            public void transformCanvas(Canvas canvas, float percentOpen) {
                float scale = (float) (percentOpen * 0.25 + 0.75);
                canvas.scale(scale, scale, canvas.getWidth() / 2,
                        canvas.getHeight() / 2);
            }

        };

<3> 最后在把實例化的接口對象賦給SlidingMenu類中的setBehindCanvasTransformer()方法:

getSlidingMenu().setBehindCanvasTransformer(mTransformer);

<4>這樣就完成了動畫效果的實現,下面是示例1的主界面代碼,其他的有興趣的朋友可以查看源代碼

package com.yanis.anima;

import android.graphics.Canvas;
import android.os.Bundle;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.CanvasTransformer;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;

/**
 * 
 * @author Yanis
 * @Description 滑動時縮放的效果
 */
public class FirstActivity extends SlidingFragmentActivity {
    private CanvasTransformer mTransformer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initAnimation();

        initSlidingMenu();

        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    /**
     * 初始化滑動菜單
     */
    private void initSlidingMenu() {
        // 設置主界面視圖
        setContentView(R.layout.layout_right);
        // 設置滑動菜單視圖
        setBehindContentView(R.layout.layout_left);
        // 設置滑動菜單的屬性值
        SlidingMenu sm = getSlidingMenu();
        // 根據dimension資源文件的ID來設置下方視圖的偏移量,此處是220dp
        sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        sm.setFadeDegree(0.35f);
        sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        sm.setBehindScrollScale(0.0f);
        sm.setBehindCanvasTransformer(mTransformer);

        setSlidingActionBarEnabled(true);
    }

    /**
     * 初始化動畫效果
     */
    private void initAnimation() {
        /**
         * transformCanvas(Canvas canvas, float percentOpen) 
         * ① Canvas  canvas:畫布類; 
         * ② float percentOpen:滑動菜單欄打開時的百分比值。
         */
        mTransformer = new CanvasTransformer() {
            @Override
            public void transformCanvas(Canvas canvas, float percentOpen) {
                float scale = (float) (percentOpen * 0.25 + 0.75);
                canvas.scale(scale, scale, canvas.getWidth() / 2,
                        canvas.getHeight() / 2);
            }

        };
    }
}

 

源代碼地址:https://github.com/YeXiaoChao/Yc_ui_slidingmenu_anima

本文地址:http://www.cnblogs.com/yc-755909659/p/4311173.html

來源文章:http://blog.csdn.net/yangyu20121224/article/details/9262931


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM