仿易信UI设计

 

大家好,这是前段时间仿易信Android客户端UI做的一个小程序,资源就是易信客户端里面找的,作为练手学习之用,希望大家喜欢!

首先是第一次使用的导航页面,效果图:

主要是处理当手左右滑动时小圆点也跟随切换的问题,这个页面的逻辑代码如下:

public class WelcomeActivity extends Activity{
	ViewPager mPager;
	MyAdapter myAdapter;
	List<View> views=new ArrayList<View>();   //页面子项
	List<ImageView> indicator=new ArrayList<ImageView>();
	ImageView icon0,icon1,icon2,icon3,icon4,icon5;
	Button start;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_welcome);
	mPager=(ViewPager)findViewById(R.id.guide_viewpager);
	//初始化pager和圆点
	initView();
	start=(Button)views.get(views.size()-1).findViewById(R.id.input_app);   //最后一个view中去获取
	myAdapter=new MyAdapter();
	mPager.setAdapter(myAdapter);
	mPager.setOnPageChangeListener(new OnPageChangeListener() {

		@Override
		public void onPageSelected(int arg0) {
			clearSate();   //清除状态
			switch (arg0) {
			case 0:   //改变圆点
				icon0.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_selected));
				break;
			case 1:
				icon1.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_selected));
				break;
			case 2:
				icon2.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_selected));
				break;
			case 3:
				icon3.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_selected));
				break;
			case 4:
				icon4.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_selected));
				break;
			case 5:
				icon5.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_selected));
				break;
			default:
				break;
			}
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
		}

		@Override
		public void onPageScrollStateChanged(int arg0) {
		}
	});
	start.setOnClickListener(new OnClickListener() {

		@Override
		public void onClick(View v) {
			startActivity(new Intent(WelcomeActivity.this,MainActivity.class));
			finish();
		}
	});
}
 /**
  *
  * @Description: 清除圆点状态
  */
 protected void clearSate() {
	 icon0.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_unselected));
	 icon1.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_unselected));
	 icon2.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_unselected));
	 icon3.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_unselected));
	 icon4.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_unselected));
	 icon5.setImageDrawable(getResources().getDrawable(R.drawable.view_pager_indicator_grey_unselected));
}
private void initView() {
	    views.add(LayoutInflater.from(WelcomeActivity.this).inflate(R.layout.view0, null));
	    views.add(LayoutInflater.from(WelcomeActivity.this).inflate(R.layout.view1, null));
	    views.add(LayoutInflater.from(WelcomeActivity.this).inflate(R.layout.view2, null));
	    views.add(LayoutInflater.from(WelcomeActivity.this).inflate(R.layout.view3, null));
	    views.add(LayoutInflater.from(WelcomeActivity.this).inflate(R.layout.view4, null));
	    views.add(LayoutInflater.from(WelcomeActivity.this).inflate(R.layout.view5, null));

		icon0=(ImageView)findViewById(R.id.indicator0);       //小圆点
		icon1=(ImageView)findViewById(R.id.indicator1);
		icon2=(ImageView)findViewById(R.id.indicator2);
		icon3=(ImageView)findViewById(R.id.indicator3);
		icon4=(ImageView)findViewById(R.id.indicator4);
		icon5=(ImageView)findViewById(R.id.indicator5);
		indicator.add(icon0);
		indicator.add(icon1);
		indicator.add(icon2);
		indicator.add(icon3);
		indicator.add(icon4);
		indicator.add(icon5);
}
class MyAdapter extends PagerAdapter{

	@Override
	public int getCount() {
		return views.size();
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return arg0==arg1;
	}

	@Override
	public Object instantiateItem(View container, int position) {
		((ViewPager)container).addView(views.get(position));
		return views.get(position);
	}

	@Override
	public void destroyItem(View container, int position, Object object) {
		((ViewPager)container).removeView(views.get(position));
	}

 }
}

接下来就是主页面,只加了actionbar和滑动tab标题栏,效果如下:

这里是基于android框架自动生成项目写的,大家新建项目这里可以选择自己喜欢的格式,如下:

这里会生成一个包含好些类的android工程项目,然后我们自己更改一些代码适配我们项目的需求,代码如下:

public class MainActivity extends Activity {

    /**
     * The {@link android.support.v4.view.PagerAdapter} that will provide
     * fragments for each of the sections. We use a
     * {@link FragmentPagerAdapter} derivative, which will keep every
     * loaded fragment in memory. If this becomes too memory intensive, it
     * may be best to switch to a
     * {@link android.support.v13.app.FragmentStatePagerAdapter}.
     */
    SectionsPagerAdapter mSectionsPagerAdapter;

    /**
     * The {@link ViewPager} that will host the section contents.
     */
    ViewPager mViewPager;
    /**
     * 用于储存Fragment的链表
     */

    private List<Fragment> list=new ArrayList<Fragment>();

    long exittime=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Set up the action bar.
        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        //add fragment
        list.add(new Fragment1(MainActivity.this));
        list.add(new Fragment2(MainActivity.this));
        list.add(new Fragment3(MainActivity.this));
        list.add(new Fragment4(MainActivity.this));

        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        // When swiping between different sections, select the corresponding
        // tab. We can also use ActionBar.Tab#select() to do this if we have
        // a reference to the Tab.
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });

        // For each of the sections in the app, add a tab to the action bar.
        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
            // Create a tab with text corresponding to the page title defined by
            // the adapter. Also specify this Activity object, which implements
            // the TabListener interface, as the callback (listener) for when
            // this tab is selected.
            actionBar.addTab(
                    actionBar.newTab()
                            .setText(mSectionsPagerAdapter.getPageTitle(i))
                            .setTabListener(new ActionBar.TabListener(){

								@Override
								public void onTabReselected(Tab tab,
										FragmentTransaction ft) {
								}

								@Override
								public void onTabSelected(Tab tab,
										FragmentTransaction ft) {
									//当某个tab被选择的时候执行,就是按下一个tab的时候
									mViewPager.setCurrentItem(tab.getPosition());
								}

								@Override
								public void onTabUnselected(Tab tab,
										FragmentTransaction ft) {
								}

                            }));
        }
    }

    @Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
    	if(event.getAction()==KeyEvent.ACTION_DOWN&&keyCode==KeyEvent.KEYCODE_BACK){
    		if(System.currentTimeMillis()-exittime>2000){
    			Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
    			exittime=System.currentTimeMillis();
    		}else{
    			finish();
    			System.exit(0);    //退出程序
    		}
    	}
		return true;
	}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        switch (id) {
		case R.id.action_search:

			break;
		case R.id.action_more:
			startActivity(new Intent(MainActivity.this,MoreActivity.class));
			break;
		default:
			break;
		}
        return true;
    }

    /**
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
     * one of the sections/tabs/pages.<p>
     * 这里是左右滑动选择pager的时候执行,并不包含点击tab哦
     */
    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
        	return list.get(position);

        }

        @Override
        public int getCount() {
            // Show  total pages.
            return 4;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            Locale l = Locale.getDefault();
            switch (position) {
                case 0:
                    return getString(R.string.title_section1).toUpperCase(l);
                case 1:
                    return getString(R.string.title_section2).toUpperCase(l);
                case 2:
                    return getString(R.string.title_section3).toUpperCase(l);
                case 3:
                	return getString(R.string.title_section4).toUpperCase(l);
            }
            return null;
        }
    }

}

还有一个是点击右上角的加号按钮弹出的一个布局:

这里只写了xml布局,比较简单:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    >
    <RelativeLayout
        android:layout_marginTop="20dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
       <TextView
           android:id="@+id/chart"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="发起群聊"
           android:drawablePadding="5dp"
           android:drawableTop="@drawable/main_chatting"/>
       <TextView
           android:id="@+id/call"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="网络通话"
           android:drawablePadding="5dp"
           android:layout_centerInParent="true"
           android:drawableTop="@drawable/main_call"/>
       <TextView
           android:id="@+id/msg"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="免费短信"
           android:drawablePadding="5dp"
           android:layout_alignParentRight="true"
           android:drawableTop="@drawable/main_sms"/>
       </RelativeLayout>
       <RelativeLayout
        android:layout_marginTop="30dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
       <TextView
           android:id="@+id/voice"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="电话留言"
           android:drawablePadding="5dp"
           android:drawableTop="@drawable/main_voice"/>
       <TextView
           android:id="@+id/friend"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="添加好友"
           android:drawablePadding="5dp"
           android:layout_centerInParent="true"
           android:drawableTop="@drawable/main_friend"/>
       <TextView
           android:id="@+id/scan"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="  扫一扫"
           android:drawablePadding="5dp"
           android:layout_alignParentRight="true"
           android:drawableTop="@drawable/main_scan"/>
       </RelativeLayout>
</LinearLayout>

想要完整源码的朋友请自己下载。

demo下载地址:

点击打开链接

时间: 2024-08-25 08:33:48

仿易信UI设计的相关文章

Android:动画实现精美的弹出框(仿易信)

demo apk下载:链接: http://pan.baidu.com/s/1eQgurse 密码: g91r 截图: 动画效果介绍: 1.点击ActionBar上"+"按钮,菜单从上方弹出(带反弹效果): 2.再次点击"+".点击空白区域或者点击返回键,菜单向上方收起: 3.点击弹出框上的按钮时,该按钮放大,其它按钮缩小,菜单整体渐变退出. 主体代码: 1.Activity. /** * 仿易信动画弹出框 */ public class MainActivity

Android4.0 Design之UI设计易犯的错误2

想成为Android的杰出开发工程师,不懂得Android的设计规则怎么可以,Android4.0问世后谷歌公司为Android程序员规范了一系列的设计原则,不要再盲目的模仿IOS的设计了,因为Android 就是Android ,不一样的烟火. (4)不要硬编码与其他应用程序的链接 在某些情况下,我们可能希望我们的应用程序可以学习另一个应用程序的优秀特性.例如,我们可能会把想要分享的内容通过社交网络.应用程序创建的消息传递程序或者浏览器中连接.切记不要使用硬编码链接到特定的应用程序来实现.相反

天津华信智原UI设计培训直达高薪企业

天津华信智原科技技术公司隶属于北京华信智原教育技术有限公司,成立于2005年,总部位于北京海淀中关村高新技术开发区. 公司现已在16个省市成立分.子公司,并联合国内外知名软件.互联网.大数据等高科技企业,在全国建立了60多个高端人才培养基地和"DT卓越工程师培养基地",承担了多项国家部委和行业协会委托的专项工程和项目,取得了优异成绩,赢得了社会及业内的广泛好评. 天津华信智原UI设计培训课程详解:(提前预约有好礼哦!预约热线:022-58151212或87081819) 第一阶段::视

UI设计学习路线图

文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 这里整理的UI设计学习路线图包含初中高三个部分,你可以通过百度云盘下载观看对应的视频 链接: http://pan.baidu.com/s/1nuUuHXR 密码: p595 好东西岂能独享,欢迎分享到你的朋友圈,推荐给更多的朋友.欢迎关注公众号,订阅视频更新,好视频岂容错过. step01初级教程 打造会代码的全能设计师成长之路 打造会代码的全能设计师成长之路(15G)... Illustrator设计视频教程 本课程通过模拟

游戏UI设计要点——你抓住玩家的心了吗?

游戏美术行情在线        游戏UI设计的好坏决定了你和玩家之间的关系,到底是初次相遇的美好呢还是"山无棱天地合乃敢与君绝"?       那么要做一名具有出色"撩妹"技巧的UI设计师,就要抓住游戏UI设计的要点,这样才能抓住玩家的心嘛!今天就跟大家聊聊游戏UI的撩妹哦不设计要点. 话说"士为知己者死,女为悦己者容",那么如何才能成功地引起对方的注意呢?这就必须有个互动的过程啦,这个过程通俗点说的呢就是"撩妹".     

App开发者必备的运营、原型、UI设计工具整理

转:http://blog.csdn.net/jinzhu117/article/details/8194301 一.运营类 1. APPVIEW,网址:http://lab.hakim.se/appview/ 帮助iOS 应用开发者追踪所有地区App Store最近的用户评论,可以按时间.评分.地区排序,缺点是可能更新较慢,评论不全. 2. AppBrain,网址:http://www.appbrain.com/ 可以在此查看Android应用在应用商店的用户评论,更新及下载量变化. 3. a

全新UI设计!三星Galaxy S5安卓界面

三星一直有对安卓界面进行定制的传统,在多款Galaxy设备中都搭载了TouchWiz界面.现在,Galaxy S5的安卓界面得到了曝光,科技网站Sammobile独家发出了多张Galaxy S5的系统界面截图,我们一起来看看吧. 这些Galaxy S5的系统界面截图主要是关于三星的语音助手应用S Voice.苹果Siri引领了移动语音助手的风潮,三星也推出了自家的语音助手应用S Voice,并在持续改进多代,从Galaxy S5的新截图中可以看到最新一代的S Voice又有了不少改进.全新的S

UI设计需具备的几大素质

近年来,IT产业对于高端技术人才需求加大,特别是北上广和知名企业对人才需求更为迫切,UI设计人员的正在接受UI培训的学员都赢认识到UI设计在未来要求将越来越高,交互设计越来越新颖也将对用户更加友好,兄弟连十年专注于IT培训,培养了大量优秀的UI设计师,下面为大家总结一下,UI设计师必须具备的素质. 1. 有规划的学习,分清主次,先熟悉了解UI的课程大纲,先掌握基础,再在原始基础上往深学,原则是了解全局,先易后难. 2. 培养养大的兴趣,不要三天打鱼,两天晒网,不管学什么都需要持之以恒,培养自己的

说说UI设计

最近的项目验收中,无数次的提到了UI的设计,首先来说说为什么UI设计如此重要. 对于用户来说产品的外观是最先映入眼帘的,不管你用了什么高端的技术,不管你后台代码封装的多么好,用户是无法体会到的,能体会到就是你的UI是否看起来顺眼,用起来顺手. 那么我又在UI设计上犯了什么错误呢?不管用户如何我好实现再说,不管用户如何我一个页面能放多少放多少等等,这样就造成了现在的问题:页面信息冗余,没有突出重点.你看为什么百度这么火?因为他就一个框一个按钮就能找到你所有需要的信息.而我的页面如下: 你能明白要干