26两种主界面的设计

两种均模仿了微信6.0底部菜单栏的效果,第一种在左右滑动的时候有动画,第二种没有,首先看第一种:

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:im="http://schemas.android.com/apk/res/com.dystu.impro"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f2f0eb"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+id/id_viewpager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
    </android.support.v4.view.ViewPager>

    <View
        android:id="@+id/line"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_above="@id/main_bottom"
        android:background="#22000000" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="60dp"
       android:background="@drawable/tabbg"
        android:orientation="horizontal" >

        <com.dystu.impro.widget.ChangeColorIconWithTextView
            android:id="@+id/id_indicator_one"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:padding="5dp"
            im:icon="@drawable/aio"
            im:text="超信"
            im:text_size="12sp" />

        <com.dystu.impro.widget.ChangeColorIconWithTextView
            android:id="@+id/id_indicator_two"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:padding="5dp"
            im:icon="@drawable/aim"
            im:text="通讯录"
            im:text_size="12sp" />

        <com.dystu.impro.widget.ChangeColorIconWithTextView
            android:id="@+id/id_indicator_three"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:padding="5dp"
            im:icon="@drawable/aiq"
            im:text="发现"
            im:text_size="12sp" />

        <com.dystu.impro.widget.ChangeColorIconWithTextView
            android:id="@+id/id_indicator_four"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:padding="5dp"
            im:icon="@drawable/ais"
            im:text="设置"
            im:text_size="12sp" />
    </LinearLayout>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <attr name="icon" format="reference" />
    <attr name="color" format="color" />
    <attr name="text" format="string" />
    <attr name="text_size" format="dimension" />

    <declare-styleable name="ChangeColorIconView">
        <attr name="icon" />
        <attr name="color" />
        <attr name="text" />
        <attr name="text_size" />
    </declare-styleable>

</resources>

注意命名空间的写法。图片资源可以下载微信的apk文件,解压缩,在文件r下的子文件q下有资源图片。

类:

package com.dystu.impro.activity;

import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;

import com.dystu.impro.R;
import com.dystu.impro.fragment.ChatAllHistoryFragment;
import com.dystu.impro.fragment.ContactlistFragment;
import com.dystu.impro.fragment.FindFragment;
import com.dystu.impro.fragment.SettingsFragment;
import com.dystu.impro.widget.ChangeColorIconWithTextView;

/**
 *
 * 测试微信的底部菜单栏使用
 *
 * @author
 *
 */

public class CopyOfMainActivity extends BaseActivity implements
		OnPageChangeListener,OnClickListener{

	private ViewPager mViewPager;
	private List<Fragment> mTabs = new ArrayList<Fragment>();
	private FragmentPagerAdapter mAdapter;
	private List<ChangeColorIconWithTextView> mTabIndicator = new ArrayList<ChangeColorIconWithTextView>();

	private ContactlistFragment contactListFragment;
	private ChatAllHistoryFragment chatHistoryFragment;
	private SettingsFragment settingFragment;
	private FindFragment findFragment;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.copyofactivity_main);
		mViewPager = (ViewPager) findViewById(R.id.id_viewpager);

		initDatas();

		mViewPager.setAdapter(mAdapter);
		mViewPager.setOnPageChangeListener(this);
	}

	private void initDatas() {
		contactListFragment = new ContactlistFragment();
		chatHistoryFragment = new ChatAllHistoryFragment();
		settingFragment = new SettingsFragment();
		findFragment = new FindFragment();

		mTabs.add(chatHistoryFragment);
		mTabs.add(contactListFragment);
		mTabs.add(findFragment);
		mTabs.add(settingFragment);
		mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())
		{

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

			@Override
			public Fragment getItem(int arg0)
			{
				return mTabs.get(arg0);
			}
		};

		initTabIndicator();

	}

	private void initTabIndicator() {
		ChangeColorIconWithTextView one = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_one);
		ChangeColorIconWithTextView two = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_two);
		ChangeColorIconWithTextView three = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_three);
		ChangeColorIconWithTextView four = (ChangeColorIconWithTextView) findViewById(R.id.id_indicator_four);

		mTabIndicator.add(one);
		mTabIndicator.add(two);
		mTabIndicator.add(three);
		mTabIndicator.add(four);

		one.setOnClickListener(this);
		two.setOnClickListener(this);
		three.setOnClickListener(this);
		four.setOnClickListener(this);

		one.setIconAlpha(1.0f);
	}

	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	@Override
	public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
		if (positionOffset > 0)
		{
			ChangeColorIconWithTextView left = mTabIndicator.get(position);
			ChangeColorIconWithTextView right = mTabIndicator.get(position + 1);

			left.setIconAlpha(1 - positionOffset);
			right.setIconAlpha(positionOffset);
		}

	}

	@Override
	public void onPageSelected(int arg0) {

	}

	@Override
	public void onClick(View v) {
		resetOtherTabs();

		switch (v.getId())
		{
		case R.id.id_indicator_one:
			mTabIndicator.get(0).setIconAlpha(1.0f);
			mViewPager.setCurrentItem(0, false);
			break;
		case R.id.id_indicator_two:
			mTabIndicator.get(1).setIconAlpha(1.0f);
			mViewPager.setCurrentItem(1, false);
			break;
		case R.id.id_indicator_three:
			mTabIndicator.get(2).setIconAlpha(1.0f);
			mViewPager.setCurrentItem(2, false);
			break;
		case R.id.id_indicator_four:
			mTabIndicator.get(3).setIconAlpha(1.0f);
			mViewPager.setCurrentItem(3, false);
			break;

		}
	}

	/**
	 * 重置其他的Tab
	 */
	private void resetOtherTabs()
	{
		for (int i = 0; i < mTabIndicator.size(); i++)
		{
			mTabIndicator.get(i).setIconAlpha(0);
		}
	}

}

四个Fragment差不多一样:(举一个例子)

package com.dystu.impro.fragment;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class ChatAllHistoryFragment extends Fragment{
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		TextView textView = new TextView(getActivity());
		textView.setTextSize(20);
		textView.setBackgroundColor(Color.parseColor("#ffffffff"));
		textView.setGravity(Gravity.CENTER);
		textView.setText("ChatAllHistoryFragment");
		return textView;
	}

}

效果图:

第二种:

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
     android:background="#f2f0eb"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout
        android:id="@+id/main_bottom"
        android:layout_width="match_parent"
        android:layout_height="52dp"
        android:layout_alignParentBottom="true"
        android:background="#FCFCFC"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <RelativeLayout
            android:id="@+id/btn_container_conversation"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <Button
                android:id="@+id/btn_conversation"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@null"
                android:drawableTop="@drawable/tab_chat_bg"
                android:onClick="onTabClicked"
                android:paddingBottom="2dip"
                android:paddingTop="7dip"
                android:scaleType="matrix"
                android:text="超信"
                android:textColor="#88000000"
                android:textSize="12sp" />

            <TextView
                android:id="@+id/unread_msg_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginRight="10dp"
                android:background="@drawable/unread_count_bg"
                android:gravity="center"
                android:text="7"
                 android:layout_marginTop="5dp"
                android:textColor="@android:color/white"
                android:textSize="12sp"
                android:visibility="visible" />
            <!-- android:visibility="invisible" -->
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/btn_container_address_list"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <Button
                android:textColor="#88000000"
                android:id="@+id/btn_address_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@null"
                android:drawableTop="@drawable/tab_contact_list_bg"
                android:onClick="onTabClicked"
                android:paddingBottom="2dip"
                android:paddingTop="7dip"
                android:scaleType="matrix"
                android:text="通讯录"
                android:textSize="12sp" />

            <TextView
                android:id="@+id/unread_address_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginRight="10dp"
                android:background="@drawable/unread_count_bg"
                android:gravity="center"
                android:text="7"
                 android:layout_marginTop="5dp"
                android:textColor="@android:color/white"
                android:textSize="12sp"
                android:visibility="visible" />
             <!-- android:visibility="invisible" -->
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/btn_container_find"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <Button
                android:textColor="#88000000"
                android:id="@+id/btn_find_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@null"
                android:drawableTop="@drawable/tab_find_bg"
                android:onClick="onTabClicked"
                android:paddingBottom="2dip"
                android:paddingTop="7dip"
                android:scaleType="matrix"
                android:text="发现"
                android:textSize="12sp" />

            <TextView
                android:id="@+id/unread_find_number"
                android:layout_width="10dp"
                android:layout_height="10dp"
                android:layout_alignParentRight="true"
                android:layout_marginRight="18dp"
                android:layout_marginTop="5dp"
                android:background="@drawable/afv"
                android:gravity="center"
                android:textColor="@android:color/white"
                android:textSize="12sp"
                android:visibility="visible" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/btn_container_setting"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" >

            <Button
                android:textColor="#88000000"
                android:id="@+id/btn_setting"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@null"
                android:drawableTop="@drawable/tab_setting_bg"
                android:onClick="onTabClicked"
                android:paddingBottom="2dip"
                android:paddingTop="7dip"
                android:scaleType="matrix"
                android:text="设置"
                android:textSize="12sp" />
        </RelativeLayout>
    </LinearLayout>

   <!--  <RelativeLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/main_bottom" /> -->

    <View
        android:id="@+id/line"
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_above="@id/main_bottom"
        android:background="#22000000" />  

    <android.support.v4.view.ViewPager
        android:id="@+id/content_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/line"
        android:fadingEdge="none"
        android:overScrollMode="never" >
    </android.support.v4.view.ViewPager>  

</RelativeLayout>

类:

package com.dystu.impro.activity;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.dystu.impro.R;
import com.dystu.impro.fragment.ChatAllHistoryFragment;
import com.dystu.impro.fragment.ContactlistFragment;
import com.dystu.impro.fragment.FindFragment;
import com.dystu.impro.fragment.SettingsFragment;

public class MainActivity extends BaseActivity {

	protected static final String TAG = "MainActivity";

	// ========================================================================

	private View btn_container_conversation, btn_container_address_list,
			btn_container_find, btn_container_setting;

	private Button btn_conversation, btn_address_list, btn_find_list,
			btn_setting;

	// ====================底部菜单栏的提醒,默认是不可见的================================

	// 未读消息textview
	private TextView unreadLabel;
	// 未读通讯录textview
	private TextView unreadAddressLable;
	// "发现"的小圆点
	private TextView unreadFindNumber;
	// ===========================================================

	// ====================新的Fragment=================================

	private ContactlistFragment contactListFragment;
	private ChatAllHistoryFragment chatHistoryFragment;
	private SettingsFragment settingFragment;
	private FindFragment findFragment;
	// ============================================================

	private ArrayList<Fragment> mFragmentList;

	private ViewPager mainPager;

	// =============================================================

	private FragmentManager mFragmentManager;

	// ===========================================================

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 界面初始函数,用来获取定义的各控件对应的ID
		initView();

	}

	// =========================================

	private void updataBottomStatu(int index) {
        switch (index) {
        case 0:
            if (!btn_container_conversation.isSelected()) {
                setConver(true);
                setAddre(false);
                setFind(false);
                setMine(false);
            }
            break;
        case 1:
            if (!btn_container_address_list.isSelected()) {
            	 setConver(false);
                 setAddre(true);
                 setFind(false);
                 setMine(false);
            }
            break;
        case 2:
            if (!btn_container_find.isSelected()) {
            	 setConver(false);
                 setAddre(false);
                 setFind(true);
                 setMine(false);
            }
            break;
        case 3:
            if (!btn_container_setting.isSelected()) {
            	 setConver(false);
                 setAddre(false);
                 setFind(false);
                 setMine(true);
            }
            break;
        }
    }  

	// ========================================

	class MainPagerAdapter extends FragmentStatePagerAdapter {
		 public MainPagerAdapter(FragmentManager fm) {
	            super(fm);
	        }  

	        @Override
	        public Fragment getItem(int arg0) {
	            return mFragmentList.get(arg0);
	        }  

	        @Override
	        public int getCount() {
	            return mFragmentList == null ? 0 : mFragmentList.size();
	        }  

	        @Override
	        public void destroyItem(ViewGroup container, int position, Object object) {  

	        }
	}

	/**
	 * 初始化组件
	 */
	private void initView() {

		BottomItemOnClickListener mClickListener = new BottomItemOnClickListener();

		unreadLabel = (TextView) findViewById(R.id.unread_msg_number);
		unreadAddressLable = (TextView) findViewById(R.id.unread_address_number);
		unreadFindNumber = (TextView) findViewById(R.id.unread_find_number);

		btn_container_conversation = findViewById(R.id.btn_container_conversation);
		btn_container_address_list = findViewById(R.id.btn_container_address_list);
		btn_container_find = findViewById(R.id.btn_container_find);
		btn_container_setting = findViewById(R.id.btn_container_setting);

		btn_conversation = (Button) findViewById(R.id.btn_conversation);
		btn_address_list = (Button) findViewById(R.id.btn_address_list);
		btn_find_list = (Button) findViewById(R.id.btn_find_list);
		btn_setting = (Button) findViewById(R.id.btn_setting);

		btn_container_conversation.setOnClickListener(mClickListener);
		btn_container_address_list.setOnClickListener(mClickListener);
		btn_container_find.setOnClickListener(mClickListener);
		btn_container_setting.setOnClickListener(mClickListener);

		mFragmentManager = getSupportFragmentManager();

		contactListFragment = new ContactlistFragment();
		chatHistoryFragment = new ChatAllHistoryFragment();
		settingFragment = new SettingsFragment();
		findFragment = new FindFragment();

		mFragmentList = new ArrayList<Fragment>();
		mFragmentList.add(chatHistoryFragment);
		mFragmentList.add(contactListFragment);
		mFragmentList.add(findFragment);
		mFragmentList.add(settingFragment);
		mainPager = (ViewPager) findViewById(R.id.content_pager);
		mainPager.setAdapter(new MainPagerAdapter(mFragmentManager));
		// 初始化
		mainPager.setCurrentItem(0);
		updataBottomStatu(0);

		/**
		 * 若禁止ViewPager滑动可以自定义ViewPager重写scrollTo方法
		 */
		mainPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
			@Override
			public void onPageSelected(int position) {
				updataBottomStatu(position);
			}

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

			}

			@Override
			public void onPageScrollStateChanged(int arg0) {

			}
		});

	}

	protected class BottomItemOnClickListener implements OnClickListener {
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.btn_container_conversation: {
				mainPager.setCurrentItem(0);
				updataBottomStatu(0);
			}
				break;
			case R.id.btn_container_address_list: {
				mainPager.setCurrentItem(1);
				updataBottomStatu(1);
			}
				break;
			case R.id.btn_container_find: {
				mainPager.setCurrentItem(2);
				updataBottomStatu(2);
			}
				break;
			case R.id.btn_container_setting: {
				mainPager.setCurrentItem(3);
				updataBottomStatu(3);
			}
				break;

			}
		}
	}

	 private void setConver(boolean isSelect) {
		 btn_container_conversation.setSelected(isSelect);
		 unreadLabel.setSelected(isSelect);
		 btn_conversation.setSelected(isSelect);
	    }  

	    private void setAddre(boolean isSelect) {
	    	btn_container_address_list.setSelected(isSelect);
	    	btn_address_list.setSelected(isSelect);
	    	unreadAddressLable.setSelected(isSelect);
	    }  

	    private void setFind(boolean isSelect) {
	    	btn_container_find.setSelected(isSelect);
	    	btn_find_list.setSelected(isSelect);
	    	unreadFindNumber.setSelected(isSelect);
	    }  

	    private void setMine(boolean isSelect) {
	    	btn_container_setting.setSelected(isSelect);
	    	btn_setting.setSelected(isSelect);
	    }  

	    /**
		 * button点击事件
		 *
		 * @param view
		 */
		public void onTabClicked(View view) {
			switch (view.getId()) {
			case R.id.btn_conversation: {
				mainPager.setCurrentItem(0);
				updataBottomStatu(0);
			}
				break;
			case R.id.btn_address_list: {
				mainPager.setCurrentItem(1);
				updataBottomStatu(1);
			}
				break;
			case R.id.btn_find_list: {
				mainPager.setCurrentItem(2);
				updataBottomStatu(2);
			}
				break;
			case R.id.btn_setting: {
				mainPager.setCurrentItem(3);
				updataBottomStatu(3);
			}
				break;

			}
		}

}

时间: 2024-11-03 16:11:44

26两种主界面的设计的相关文章

Android ActionBar应用实战,高仿微信主界面的设计

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很难说.那么不用担心,本篇文章我就将带领大家一起进入ActionBar的应用实战,将理论和实践完美结合到一起. 如果你还没有看过我的前两篇文章,建议先去阅读一下 Andr

会员管理系统的设计和开发(3)--主界面的设计思路分享

会员管理系统经过一段时间的紧锣密鼓开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续介绍这个开发过程中相关的技术要点,本章主要介绍会员管理里面,列表主界面的一些设计思路分享. 有时候,遵循一些固定的套路做事情,总是很容易,如果每个地方搞一些创新和改进,那么往往需要花费很多时间,但是创新是有积极意义的,虽然可能会遇到困难,但是很值得去做.在Winform的界面设计上,虽然我可以使用代码生成工具生成比较标准的界面了,但是我总是喜欢参考学习,并改进一些界面方面

Winform_devexpress开发框架主界面设计

做了好多年的C#开发,从.Net.Winform及第三方的 DevExpress.无论什么样的系统,主界面的设计及风格无疑非常重要.从客户的角度考虑,要求功能区清晰,整体美观大方,这样才会有可能从第一视觉或印象中吸引客户. 之前也自己做过很多.Net 和Winform的界面框架,接触DevExpress后,感觉色彩搭配及界面整体感觉不错,所以设计出如下界面. DevExpress样式主界面介绍 在WinForm 框架中,界面分多个区展现,简洁易区分,并且可根据需要,对部分功能进行隐藏,使功能界面

Android应用经典主界面框架之二:仿网易新闻client、CSDN client (Fragment ViewPager)

另外一种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表.使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View.而是Fragment.所以适配器不能继承PagerAdapter,而要继承FragmentPagerAdapter,这是在android.support.v4.app.FragmentPagerAdapter包里的.有点奇葩的是,FragmentPagerAdapter仅仅在这个包里有,在android.app.*这个包以

Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)

第二种主界面风格则是以网易新闻.凤凰新闻以及新推出的新浪博客(阅读版)为代表,使用ViewPager+Fragment,即ViewPager里适配器里放的不是一般的View,而是Fragment.所以适配器不能继承PagerAdapter,而要继承FragmentPagerAdapter,这是在android.support.v4.app.FragmentPagerAdapter包里的.有点奇葩的是,FragmentPagerAdapter只在这个包里有,在android.app.*这个包下面么

Ext JS 6开发实例(三) :主界面设计

在上文中,已经将CMD创建的应用程序导入到项目里了,而且也看到默认的主界面了,今天的主要工作就是修改这个主界面,以符合项目的需要.除了设计主界面,还有一些其他的东西需要配置一下. 添加本地化包 打开app.json文件,找到requires,代码如下:     "requires": [      "font-awesome"     ],12341234 以上代码说明项目默认已经引用了Font Awesome的图标,可以在项目中直接使用.这个在项目的后续开发中会经

IOS的两种框架设计思想

不管是任何一门语言,架构设计永远在其中占据着十分重要的作用,一个好的架构思想能够让程序的流程更加清晰,能够让程序工作的更加简单而有效.如果没有架构思想的话,那么所有的程序设计都将沿着一条设计思路走下去,程序设计将完全失去了活力,只剩下了千篇一律的代码编写,修改,调试:有了代码架构,我们将在程序的思想上投入更大的精力,投入更多的时间与精力去创造一些便利程序设计的结构,这将使程序的结构更加多样化,便利化,也会使你在学习工作的过程中事半功倍. 说了这么多,似乎总是没有什么有力的证据来印证这么一些话,我

Winform开发框架主界面设计展示

做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计总是会精益求精,力求做到更好用.更美观,这样才能吸引客户使用. 目前的主体界面设计,可以使用很多控件进行美化,这样能使得开发者能够迅速开发好美观的界面,也可以使得界面总体性有一个统一.规范的基准.一般推荐使用DevExpress或者DotNetbar这两款界面控件套件,他们都能设计出类似Office

Unity3d Android SDK接入解析(二)Unity3d Android SDK的设计与两种接入方式

一.前言 上篇说清楚了Unity和Android调用的方式,但很多实际接入的部分没有讲的很详细,因为重头在这篇,会详细讲述具体接入Android SDK的方式,和怎么去做一个方便Unity接入的SDK. 传送门: 前篇:Unity3d 与 Android之间的互相调用 http://blog.csdn.net/yang8456211/article/details/51331358 后篇:Unity3d Android SDK接入解析(三)接入Android Library的理解 http://