文档章节

仿照网易云音乐界面 android特效

拼一把
 拼一把
发布于 2015/12/18 15:01
字数 642
阅读 178
收藏 3

仿照网易云音乐界面 ,页面UI实现的听不错的,学习ui的朋友可以下载下来研究研究,android特效更多学习。
项目大体框架,由ViewPager和TabContentPagerAdapter实现顶部的左右滑动切换view.
右侧滑动DrawerLayout 实现左右滑动。

项目大体实现:

package me.xoder.neteasy.activity;

import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;

import java.lang.reflect.Method;

import me.xoder.neteasy.R;
import me.xoder.neteasy.adapter.TabContentPagerAdapter;

public class MainActivity extends FragmentActivity {
    private ViewPager mViewPager;
    private DrawerLayout slideMenu;
    private ActionBar actionBar;

    private TabContentPagerAdapter mPagerAdapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        actionBar = getActionBar();
        mViewPager = (ViewPager) findViewById(R.id.view_pager);
        slideMenu = (DrawerLayout) findViewById(R.id.slide_menu);

        slideMenu.setScrimColor(Color.argb(50, 0, 0, 0));

        mPagerAdapter = new TabContentPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });
        
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {
            @Override
            public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
                mViewPager.setCurrentItem(tab.getPosition());
            }
            
            @Override
            public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
                
            }
            
            @Override
            public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
                
            }
        };
        
        TypedArray tabIconIds = getResources().obtainTypedArray(R.array.actionbar_icons);
        for (int i = 0; i < 3; i++) {
            View view = getLayoutInflater().inflate(R.layout.actionbar_tab, null);
            ImageView tabIcon = (ImageView) view.findViewById(R.id.actionbar_tab_icon);
            tabIcon.setImageResource(tabIconIds.getResourceId(i, -1));
            
            actionBar.addTab(actionBar.newTab().setCustomView(view).setTabListener(tabListener));
        }
        
        enableEmbeddedTabs(actionBar);
    }
    
    /**
     * 在actionbar中内嵌Tab
     *
     * @param actionBar actionbar
     */
    private void enableEmbeddedTabs(android.app.ActionBar actionBar) {
        try {
            Method setHasEmbeddedTabsMethod = actionBar.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
            setHasEmbeddedTabsMethod.setAccessible(true);
            setHasEmbeddedTabsMethod.invoke(actionBar, true);
        } catch (Exception e) {
            Log.v("enableEmbeddedTabs", e.getMessage().toString());
        }
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        
        if (id == R.id.action_search) {
            // TODO: 2015-07-25 搜索界面         
        } else if (id == R.id.action_menu) {
            // TODO: 2015-07-25 菜单选择
            if (slideMenu.isDrawerOpen(Gravity.RIGHT)) {
                slideMenu.closeDrawer(Gravity.RIGHT);
            } else {
                slideMenu.openDrawer(Gravity.RIGHT);
            }
        }
        
        return true;
    }
}




//////////////////

package me.xoder.neteasy.activity;

import android.annotation.TargetApi;
import android.app.ActionBar;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;

import me.xoder.neteasy.R;
import me.xoder.neteasy.fragment.discover.fm.CoverFragment;
import me.xoder.neteasy.fragment.discover.fm.LyricFragment;

/**
 * Created by alex.lee on 2015-07-29.
 */
public class PersonalFMActivity extends FragmentActivity {
    private ActionBar actionBar;

    private Fragment fgTo;
    private Fragment fgCover;
    private Fragment fgLyric;
    private boolean fgFlag = false;

    private FrameLayout frameContainer;

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_personal_fm);

        actionBar = getActionBar();
        actionBar.setTitle("私人FM");
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setDisplayUseLogoEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setLogo(R.drawable.actionbar_logo);
        actionBar.setHomeAsUpIndicator(R.drawable.rdi_icn_arr);

        if (fgCover == null) {
            fgCover = new CoverFragment();
        }
        if (!fgCover.isAdded()) {
            getSupportFragmentManager().beginTransaction().add(R.id.frame_fm_container, fgCover, CoverFragment.class.getSimpleName()).commit();
        }
        fgTo = fgCover;

        frameContainer = (FrameLayout) findViewById(R.id.frame_fm_container);
        frameContainer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (fgFlag) {
                    if (fgCover == null) {
                        fgCover = new CoverFragment();
                    }
                    switchFragment(fgTo, fgCover);
                } else {
                    if (fgLyric == null) {
                        fgLyric = new LyricFragment();
                    }
                    switchFragment(fgTo, fgLyric);
                }
                fgFlag = !fgFlag;
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_personal_fm, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        switch (id) {
            case android.R.id.home:
                finish();
                break;
        }

        return true;
    }

    public void switchFragment(Fragment from, Fragment to) {
        if (from == null || to == null || from == to) {
            return;
        }

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.setCustomAnimations(R.anim.abc_fade_in, R.anim.abc_fade_out);

        if (!to.isAdded()) {
            // 隐藏当前的fragment,add下一个到Activity中
            transaction.hide(from).add(R.id.frame_fm_container, to).commit();
        } else {
            // 隐藏当前的fragment,显示下一个
            transaction.hide(from).show(to).commit();
        }

        fgTo = to;
    }
}


文章来源《IT蓝豹》android特效技术分享网站

© 著作权归作者所有

拼一把
粉丝 2
博文 53
码字总数 26406
作品 0
海淀
私信 提问
自制在线音乐播放平台,电脑办公者100%好评。

好久不见,简书的宝宝们。 很久没有更新文章了,其实一直在想着重整旗鼓,卷土重来。但是贫穷限制了我的梦想,但是无论如何,我还是不会放弃的,come on. 利用零碎的事件推送一个我觉得很方便...

我笑地球不太圆ORZ
2018/05/20
0
0
Android TV 开发(4)

本文来自网易云社区 作者:孙有军 最后我们再来看看好友界面,改界面本地是没有xml的,因此我们直接来看看代码: 这里将使用到数据bean,与数据源的代码也贴出来如下: public class Contact...

网易云
2018/09/26
0
0
android开源项目框架大全:《IT蓝豹》

android开源项目框架大全: 1.多页切换TabHost 9 android-sticky-viewpager ViewPager带有粘性功能,常规的处理方法可能会超级复杂,因为涉及到大量的onTouch监听、拦截,滑动时因为效率问题...

抉择很难
2015/10/20
583
0
android开源项目框架大全:《IT蓝豹》

android开源项目框架大全: 1.多页切换TabHost 9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式,自定义AnimTabsV...

抉择很难
2015/10/20
733
1
解锁网易云音乐客户端变灰歌曲 - UnblockNeteaseMusic

UnblockNeteaseMusic 可以用来解锁网易云音乐客户端变灰歌曲 特性 使用网易云旧链 / QQ / 虾米 / 百度 / 酷狗 / 酷我 / 咕咪 / JOOX 音源替换变灰歌曲链接 (默认仅启用前四) 为请求增加 参数...

匿名
05/06
5.3K
11

没有更多内容

加载失败,请刷新页面

加载更多

PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
26分钟前
6
0
wildfly(JBoss AS)应用服务器快速入门

什么是wildfly JBoss AS 从8版本起名为wildfly。Wildfly是一个开源的基于JavaEE的轻量级应用服务器。可以在任何商业应用中免费使用。 WildFly是一个灵活的、轻量的、强大管理能力的应用程序服...

程序新视界
51分钟前
5
0
Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾。 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/column/details/21930...

Java技术江湖
54分钟前
6
0
怎么用for循环打出爱心

先上效果图: 这是用*组成的爱心,下面讲讲思路: 首先这个图形可以拆分成三部分:第一部分是上面三行的两个梯形,第二部分是中间三行的长方形,第三部分是最下面的倒三角形。 其实图形拆分好...

INEVITABLE
今天
4
0
用HttpUrlConnection伪造成HttpClient

https://www.jianshu.com/p/27ad06cc39d2

shzwork
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部