android UI设计及开发

一、viewPager实现左右滑动及导引功能

1,如果每个屏幕只是一个简单的布局,如果简单的话,定义一个arraryIist<View>,利用addview将所有的布局加载,

然后为viewpager定义一个adapter。对于页面内部控件的处理事件在instantiateItem中进行处理。

2,如果每一个屏幕的布局,相对复杂的话,可以将其封装为一个类,在这个类中给页面内部对应的组件添加点击事件。

package com.slide.menu;



import java.util.ArrayList;



import com.slide.util.SlideMenuUtil;



import android.app.Activity;

import android.graphics.Color;

import android.util.Log;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

import android.view.animation.TranslateAnimation;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;



/**

 * 顶部滑动菜单布局设置

 * @Description: 顶部滑动菜单布局设置



 * @FileName: SlideMenuLayout.java 



 * @Package com.slide.menu 



 * @Author Hanyonglu



 * @Date 2012-4-20 上午11:17:31 



 * @Version V1.0

 */

public class SlideMenuLayout {

    // 包含菜单的ArrayList

    private ArrayList<TextView> menuList = null;

    

    private Activity activity;

    private TextView textView = null;

    private SlideMenuUtil menuUtil = null;

    

    public SlideMenuLayout(Activity activity){

        this.activity = activity;

        menuList = new ArrayList<TextView>();

        menuUtil = new SlideMenuUtil();

    }

    

    /**

     * 顶部滑动菜单布局

     * @param menuTextViews

     * @param layoutWidth

     */

    public View getSlideMenuLinerLayout(String[] menuTextViews,int layoutWidth){

        // 包含TextView的LinearLayout

        LinearLayout menuLinerLayout = new LinearLayout(activity);

        menuLinerLayout.setOrientation(LinearLayout.HORIZONTAL);

        

        // 参数设置

        LinearLayout.LayoutParams menuLinerLayoutParames = new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.WRAP_CONTENT, 

                LinearLayout.LayoutParams.WRAP_CONTENT,

                1);

        menuLinerLayoutParames.gravity = Gravity.CENTER_HORIZONTAL;

        

        // 添加TextView控件

        for(int i = 0;i < menuTextViews.length; i++){

            //形成textview标签<textView>

            TextView tvMenu = new TextView(activity);

            

            // 设置标识值(menuTextView是从外部传递数值)

            tvMenu.setTag(menuTextViews[i]);

            //相当于在textview下设置<android:layoutWidth>和<android:layoutHeight>            

            tvMenu.setLayoutParams(new LayoutParams(layoutWidth / 4,30)); 

            tvMenu.setPadding(30, 14, 30, 10);

            tvMenu.setText(menuTextViews[i]);

            tvMenu.setTextColor(Color.WHITE);

            tvMenu.setGravity(Gravity.CENTER_HORIZONTAL);

            tvMenu.setOnClickListener(SlideMenuOnClickListener);

            

            // 菜单项计数

            menuUtil.count ++;



            // 设置第一个菜单项背景

            if(menuUtil.count == 1){

                tvMenu.setBackgroundResource(R.drawable.menu_bg);

            }

            

            menuLinerLayout.addView(tvMenu,menuLinerLayoutParames);

            menuList.add(tvMenu);

        }



        return menuLinerLayout;

    }

    

    // 单个菜单事件,第一更改对应菜单项的背景图片,另一方面将内容布局的内容更改为菜单项对应的布局

    OnClickListener SlideMenuOnClickListener = new OnClickListener() {

        

        @Override

        public void onClick(View v) {

            // TODO Auto-generated method stub

            String menuTag = v.getTag().toString();

            

            if(v.isClickable()){

                textView = (TextView)v;

                Log.i("SlideMenu", 

                        "width:" + textView.getWidth() + 

                        "height:" + textView.getHeight());



                textView.setBackgroundResource(R.drawable.menu_bg);

                

                for(int i = 0;i < menuList.size();i++){

                    if(!menuTag.equals(menuList.get(i).getText())){

                        menuList.get(i).setBackgroundDrawable(null);

                    }

                }

                

                // 点击菜单时改变内容

                slideMenuOnChange(menuTag);

            }

        }

    };

    

    // 点击时改内容,就是首先将内容布局对应的控件全部删除,然后添加需要展现的控件即可

    private void slideMenuOnChange(String menuTag){

        LayoutInflater inflater = activity.getLayoutInflater();

        //下面的内容页面

        ViewGroup llc = (ViewGroup)activity.findViewById(R.id.linearLayoutContent);

        llc.removeAllViews();

        if(menuTag.equals(SlideMenuUtil.ITEM_MOBILE)){

            llc.addView(inflater.inflate(R.layout.item_mobile, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_WEB)){

            llc.addView(inflater.inflate(R.layout.item_web, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_CLOUD)){

            llc.addView(inflater.inflate(R.layout.item_cloud, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_DATABASE)){

            llc.addView(inflater.inflate(R.layout.item_database, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_EMBED)){

            llc.addView(inflater.inflate(R.layout.item_embed, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_SERVER)){

            llc.addView(inflater.inflate(R.layout.item_server, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_DOTNET)){

            llc.addView(inflater.inflate(R.layout.item_dotnet, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_JAVA)){

            llc.addView(inflater.inflate(R.layout.item_java, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_SAFE)){

            llc.addView(inflater.inflate(R.layout.item_safe, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_DOMAIN)){

            llc.addView(inflater.inflate(R.layout.item_domain, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_RESEASRCH)){

            llc.addView(inflater.inflate(R.layout.item_research, null));

        }else if(menuTag.equals(SlideMenuUtil.ITEM_MANAGE)){

            llc.addView(inflater.inflate(R.layout.item_manage, null));

        }

    }

}

这样,在viewpager所在的activity,仅仅需要调用getSlideMenuLinerLayout(String[] menuTextViews,int layoutWidth)方法即可,并在这里处理页面滚动事件

package com.slide.menu;



import java.util.ArrayList;



import com.slide.util.SlideMenuUtil;



import android.app.Activity;

import android.os.Bundle;

import android.os.Parcelable;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.util.DisplayMetrics;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;



/**

 * Android实现导航菜单左右滑动效果

 * 

 * @Description: Android实现导航菜单左右滑动效果

 * 

 * @FileName: SlideMenuActivity.java

 * 

 * @Package com.slide.menu

 * 

 * @Author Hanyonglu

 * 

 * @Date 2012-4-20 上午09:15:11

 * 

 * @Version V1.0

 */

public class SlideMenuActivity extends Activity {

    /** Called when the activity is first created. */

    private String[][] menus = {

            { SlideMenuUtil.ITEM_MOBILE, SlideMenuUtil.ITEM_WEB,

                    SlideMenuUtil.ITEM_CLOUD, SlideMenuUtil.ITEM_DATABASE },

            { SlideMenuUtil.ITEM_EMBED, SlideMenuUtil.ITEM_SERVER,

                    SlideMenuUtil.ITEM_DOTNET, SlideMenuUtil.ITEM_JAVA },

            { SlideMenuUtil.ITEM_SAFE, SlideMenuUtil.ITEM_DOMAIN,

                    SlideMenuUtil.ITEM_RESEASRCH, SlideMenuUtil.ITEM_MANAGE } };



    // 当前ViewPager索引

    private int pagerIndex = 0;

    private ArrayList<View> menuViews = null;



    private ViewGroup main = null;

    private ViewPager viewPager = null;

    // 左右导航图片按钮

    private ImageView imagePrevious = null;

    private ImageView imageNext = null;



    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 设置无标题窗口

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // 取得窗口属性

        DisplayMetrics dm = new DisplayMetrics();

        getWindowManager().getDefaultDisplay().getMetrics(dm);

        // 窗口的宽度

        int screenWidth = dm.widthPixels;



        LayoutInflater inflater = getLayoutInflater();

        menuViews = new ArrayList<View>();

        SlideMenuLayout menu = new SlideMenuLayout(this);



        for (int i = 0; i < menus.length; i++) {

            // menuViews为一个集合,arrayList<View>

            menuViews.add(menu.getSlideMenuLinerLayout(menus[i], screenWidth));

        }



        main = (ViewGroup) inflater.inflate(R.layout.main, null);



        setContentView(main);

        // 左右导航图片按钮

        imagePrevious = (ImageView) findViewById(R.id.ivPreviousButton);

        imageNext = (ImageView) findViewById(R.id.ivNextButton);

        imagePrevious.setOnClickListener(new ImagePreviousOnclickListener());

        imageNext.setOnClickListener(new ImageNextOnclickListener());



        if (menuViews.size() > 1) {

            imageNext.setVisibility(View.VISIBLE);

        }



        // 菜单背景

        // imageMenuBack = (ImageView)findViewById(R.id.ivMenuBackground);

        // imageMenuBack.setVisibility(View.INVISIBLE);



        // 加载移动菜单下内容,llc为主体部分的布局

        ViewGroup llc = (ViewGroup) findViewById(R.id.linearLayoutContent);

        llc.addView(inflater.inflate(R.layout.item_mobile, null));



        viewPager = (ViewPager) main.findViewById(R.id.slideMenu);

        viewPager.setAdapter(new SlideMenuAdapter());

        viewPager.setOnPageChangeListener(new SlideMenuChangeListener());

    }



    // 滑动菜单数据适配器

    class SlideMenuAdapter extends PagerAdapter {



        @Override

        public int getCount() {

            // View v =

            // menuViews.get(0).findViewWithTag(SlideMenuUtil.ITEM_MOBILE);

            // v.setBackgroundResource(R.drawable.menu_bg);

            return menuViews.size();

        }



        @Override

        public boolean isViewFromObject(View arg0, Object arg1) {

            return arg0 == arg1;

        }



        @Override

        public int getItemPosition(Object object) {

            // TODO Auto-generated method stub

            return super.getItemPosition(object);

        }



        @Override

        public void destroyItem(View arg0, int arg1, Object arg2) {

            // TODO Auto-generated method stub

            ((ViewPager) arg0).removeView(menuViews.get(arg1));

        }



        @Override

        public Object instantiateItem(View arg0, int arg1) {

            // TODO Auto-generated method stub

            ((ViewPager) arg0).addView(menuViews.get(arg1));



            return menuViews.get(arg1);

        }



        @Override

        public void restoreState(Parcelable arg0, ClassLoader arg1) {

            // TODO Auto-generated method stub



        }



        @Override

        public Parcelable saveState() {

            // TODO Auto-generated method stub

            return null;

        }



        @Override

        public void startUpdate(View arg0) {

            // TODO Auto-generated method stub



        }



        @Override

        public void finishUpdate(View arg0) {

            // TODO Auto-generated method stub



        }

    }



    // 滑动菜单更改事件监听器

    class SlideMenuChangeListener implements OnPageChangeListener {



        @Override

        public void onPageScrollStateChanged(int arg0) {

            // TODO Auto-generated method stub



        }



        @Override

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

            // TODO Auto-generated method stub



        }



        @Override

        public void onPageSelected(int arg0) {
//agr0代表现在显示的是viewpager的第几个页面
int pageCount = menuViews.size() - 1; pagerIndex = arg0; // 显示右边导航图片 if (arg0 >= 0 && arg0 < pageCount) { imageNext.setVisibility(View.VISIBLE); } else { imageNext.setVisibility(View.INVISIBLE); } // 显示左边导航图片 if (arg0 > 0 && arg0 <= pageCount) { imagePrevious.setVisibility(View.VISIBLE); } else { imagePrevious.setVisibility(View.INVISIBLE); } } } // 右导航图片按钮事件 class ImageNextOnclickListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub pagerIndex++; viewPager.setCurrentItem(pagerIndex); } } // 左导航图片按钮事件 class ImagePreviousOnclickListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub pagerIndex--; viewPager.setCurrentItem(pagerIndex); } } }

2,底部菜单栏两种方式实现

3,fragment的用法

你可能感兴趣的:(android ui)