开源库guillotine使用解析

简介:

转载请注明出处:王亟亟的大牛之路
最近在忙跳槽的事,导致好多天没敲代码,昨天正好看到这个库终于搞通然后就写篇文章吧(之前Gradle怎么都有问题,真是坑)
看多了千篇一律的左右抽屉形式的主Menu和Content部分,看这个菜单还是一种新感觉吧,话不多说先上效果图。
这里写图片描述
这里写图片描述
大致就是按左上角的红色/蓝色按钮然后显示菜单和主内容。
这里写图片描述
Git上的项目,多数是Gradle建包的所以就配合吧,包很简单,一个Lib包一个Sample的项目包。(拿来一族表示,能用就行,好,来看看怎么用)

要使用这个库要写一个Application类并且在manifest里注册这个类
ps:用过SlidingMenu的小伙伴一定知道,他们都要一个类似的这个类

public class App extends Application {
    private static final String CANARO_EXTRA_BOLD_PATH = "fonts/canaro_extra_bold.otf";
    public static Typeface canaroExtraBold;

    @Override
    public void onCreate() {
        super.onCreate();
        initTypeface();
    }

    private void initTypeface() {
        canaroExtraBold = Typeface.createFromAsset(getAssets(), CANARO_EXTRA_BOLD_PATH);

    }
}

大牛还写了一个自定义的TextView其实,这个类有没有无所谓了,我们使用的时候可以无视他

public class CanaroTextView extends TextView {
    public CanaroTextView(Context context) {
        this(context, null);
    }

    public CanaroTextView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CanaroTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setTypeface(App.canaroExtraBold);
    }

}

主Activity
这里大牛用了一个注解来解决他的FindViewById的事,类库地址http://jakewharton.github.io/butterknife/,这里不做解释,不过看了看还是蛮简单的,可以以后在项目中试用下

public class MainActivity extends AppCompatActivity {
    private static final long RIPPLE_DURATION = 250;


    @InjectView(R.id.toolbar)
    Toolbar toolbar;
    @InjectView(R.id.root)
    FrameLayout root;
    @InjectView(R.id.content_hamburger)
    View contentHamburger;
    Button testbuttonbutton;
    @InjectView(R.id.contentbutton)
    Button contentbutton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        ButterKnife.inject(this);


        if (toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle(null);
        }

        View guillotineMenu = LayoutInflater.from(this).inflate(R.layout.guillotine, null);
        root.addView(guillotineMenu);

        new GuillotineAnimation.GuillotineBuilder(guillotineMenu, guillotineMenu.findViewById(R.id.guillotine_hamburger), contentHamburger)
                .setStartDelay(RIPPLE_DURATION)
                .setActionBarViewForAnimation(toolbar)
                .build();
        testbuttonbutton =(Button)guillotineMenu.findViewById(R.id.testbutton);
        listener();
    }

    private void listener(){
        testbuttonbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"menuButton",Toast.LENGTH_SHORT).show();
            }
        });
        contentbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"contentbutton",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

逻辑:在主页面吐司一个“contentbutton”,然后在菜单页面吐司一个“menuButton”。
我们根本不需要对展示层做什么修改,照搬用就行了,很方便。

manifest文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yalantis.guillotine.sample">

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"

        android:theme="@style/AppTheme">

        <activity
            android:name=".activity.MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

源码地址:http://yunpan.cn/ccNJpEzA4NZGd 访问密码 7a65
谢谢大家

目录
相关文章
|
2月前
|
算法 Linux 开发者
CMake深入解析:打造高效动态链接库路径设置
CMake深入解析:打造高效动态链接库路径设置
49 0
|
2月前
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
37 0
|
2月前
|
缓存 算法 C语言
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
48 0
|
2月前
|
Kubernetes 网络协议 定位技术
阿里云DNS常见问题之IP地理位置库功能开通失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2月前
|
算法 IDE Linux
【CMake 小知识】CMake中的库目标命名和查找策略解析
【CMake 小知识】CMake中的库目标命名和查找策略解析
102 1
|
2月前
|
安全 网络性能优化 Android开发
深入解析:选择最佳C++ MQTT库的综合指南
深入解析:选择最佳C++ MQTT库的综合指南
92 0
|
2月前
|
存储 并行计算 算法
【C++ 函数式编程】深入解析 C++ 函数式编程<functional> 库
【C++ 函数式编程】深入解析 C++ 函数式编程<functional> 库
139 0
|
2月前
|
JSON JavaScript 数据格式
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
100 2
|
2月前
|
XML JSON API
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
56 0
|
2月前
|
Linux 编译器 开发者
C/C++动态库与静态库 的详细解析
C/C++动态库与静态库 的详细解析
83 0

推荐镜像

更多