最近一段时间进了Android的大坑,一门心思的学习Android大法,读了两三本书,就萌生了模仿微信界面的想法。

分析Android版本的微信界面需求就会发现它的核心,不得不佩服微信界面的简洁和灵活。腾讯的设计大法还是颇有一番味道的。目前我模仿的界面仅限于表面。核心部分只能说心有余力不足了。

滑动界面的实现是基于Fragment类实现的,但是它有先天不足,不能使用滑动转换界面。所以,我使用了Fragment和viewPager混合实现界面需求功能。

 

 

具体代码如下,仅仅提供大体思路。

1、主Activity的Java代码

 

package com.example.app_weixin;import android.content.Intent;import android.media.Image;import android.provider.SyncStateContract;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.app.FragmentTransaction;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.PopupMenu;import android.widget.RelativeLayout;import android.widget.TextView;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;public class MainActivity extends FragmentActivity {    private FragmentManager fragmentManager;    private FragmentTransaction transaction;    private Fragment wechatFragment;    private ImageView wechatImageView;    private TextView wechatTextView;    private Fragment contactFragment;    private ImageView contactImageView;    private TextView contactTextView;    private Fragment findFragment;    private ImageView findImageView;    private TextView findTextView;    private Fragment profileFragment;    private ImageView profileImageView;    private TextView profileTextView;    private RelativeLayout wechatLayout,contactLayout,findLayout,profileLayout;    private ViewPager viewPager;    private ImageView menuView,searchView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initFragmentView();    }    /*实例化控件*/    void initView(){        wechatImageView=(ImageView)findViewById(R.id.wechat_iv);        wechatTextView=(TextView)findViewById(R.id.wechat_tv);        contactImageView=(ImageView)findViewById(R.id.contact_iv);        contactTextView=(TextView)findViewById(R.id.contact_tv);        findImageView=(ImageView)findViewById(R.id.find_iv);        findTextView=(TextView)findViewById(R.id.find_tv);        profileImageView=(ImageView)findViewById(R.id.profile_iv);        profileTextView=(TextView)findViewById(R.id.profile_tv);        wechatLayout=(RelativeLayout)findViewById(R.id.re_wechat);        contactLayout=(RelativeLayout)findViewById(R.id.re_contact);        findLayout=(RelativeLayout)findViewById(R.id.re_find);        profileLayout=(RelativeLayout)findViewById(R.id.re_profile);        menuView=(ImageView)findViewById(R.id.add);        searchView=(ImageView)findViewById(R.id.search);        searchView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent mintent=new Intent(MainActivity.this,SearchActivity.class);                startActivity(mintent);                overridePendingTransition(R.animator.animator_in,R.animator.animator_out);            }        });        menuView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                PopupMenu popupMenu=new PopupMenu(MainActivity.this,v);                popupMenu.getMenuInflater().inflate(R.menu.menu,popupMenu.getMenu());                /*暴力破解为menu添加icon问题。失败了。*/                /*if (popupMenu!=null){                    try {                        Method method=popupMenu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);                        method.setAccessible(true);                        method.invoke(popupMenu,true);                    }catch (Exception e){                        e.printStackTrace();                    }                }*/                popupMenu.show();            }        });        wechatLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(0);                initFragment(4);                wechatImageView.setImageResource(R.drawable.weixin_pressed);                wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        contactLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(1);                initFragment(4);                contactImageView.setImageResource(R.drawable.contact_list_pressed);                contactTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        findLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(2);                initFragment(4);                findImageView.setImageResource(R.drawable.find_pressed);                findTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        profileLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(3);                initFragment(4);                profileImageView.setImageResource(R.drawable.profile_pressed);                profileTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        initFragment(0);        wechatImageView.setImageResource(R.drawable.weixin_pressed);        wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));    }    void initFragment(int index){        //fragmentManager=getSupportFragmentManager();        //transaction=fragmentManager.beginTransaction();        wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        wechatImageView.setImageResource(R.drawable.weixin_normal);        contactTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        contactImageView.setImageResource(R.drawable.contact_list_normal);        findTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        findImageView.setImageResource(R.drawable.find_normal);        profileTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        profileImageView.setImageResource(R.drawable.profile_normal);        switch (index) {            case 0:                wechatImageView.setImageResource(R.drawable.weixin_pressed);                wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            case 1:                contactImageView.setImageResource(R.drawable.contact_list_pressed);                contactTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            case 2:                findImageView.setImageResource(R.drawable.find_pressed);                findTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            case 3:                profileImageView.setImageResource(R.drawable.profile_pressed);                profileTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            default:                break;        }        /*仅仅使用fragment的形式,被遗弃了*/       /* if (wechatFragment!=null){            transaction.hide(wechatFragment);        }        if (contactFragment!=null){            transaction.hide(contactFragment);        }        if (findFragment!=null){            transaction.hide(findFragment);        }        if (profileFragment!=null){            transaction.hide(profileFragment);        }        switch (index){            case 0:                if (wechatFragment==null){                    wechatFragment=new Fragment_wechat();                    transaction.add(R.id.fragment,wechatFragment);                }else {                    transaction.show(wechatFragment);                }                break;            case 1:                if (contactFragment==null){                    contactFragment=new Fragment_contact();                    transaction.add(R.id.fragment,contactFragment);                }else {                    transaction.show(contactFragment);                }                break;            case 2:                if (findFragment==null){                    findFragment=new Fragment_find();                    transaction.add(R.id.fragment,findFragment);                }else {                    transaction.show(findFragment);                }                break;            case 3:                if (profileFragment==null){                    profileFragment=new Fragment_profile();                    transaction.add(R.id.fragment,profileFragment);                }else {                    transaction.show(profileFragment);                }                break;        }        transaction.commit();*/    }    void initFragmentView(){        Listfragments=new ArrayList();        fragments.add(new Fragment_wechat());        fragments.add(new Fragment_contact());        fragments.add(new Fragment_find());        fragments.add(new Fragment_profile());        FragmentAdapter fadapter=new FragmentAdapter(getSupportFragmentManager(),fragments);        viewPager=(ViewPager)findViewById(R.id.viewPager);        viewPager.setAdapter(fadapter);    }    class FragmentAdapter extends FragmentPagerAdapter{        private ListmFragments;        public FragmentAdapter(FragmentManager fm,Listfragments){            super(fm);            this.mFragments=fragments;        }        @Override        public void setPrimaryItem(ViewGroup container, int position, Object object) {            initFragment(position);            super.setPrimaryItem(container, position, object);        }        @Override        public Fragment getItem(int position) {            return mFragments.get(position);        }        @Override        public int getCount() {            return mFragments.size();        }    }}


2、主Activity的html代码

 

 

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

 

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

 

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

3、4个Fragment的java代码(取其中一个介绍)

package com.example.app_weixin;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * Created by 尽途 on 2017/3/25. */public class Fragment_find extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment_find,container,false);    }}

4、fragment的html代码

 

 

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

       最后说一下,在使用Fragment时,应该使用v4包,不要选着IDE工具提供的Fragment。要自己写一个继承与Fragment的类。
 

 

更多相关文章

  1. 腾讯T3大牛带你了解 2019 Android开发趋势及必备技术点!
  2. android之如何使用Android的搜索框架
  3. Android(安卓)事件全局监听(二)需要root权限 ,使用getevent监听Andr
  4. Android(安卓)APK 签名比对,防止软件被破解使用
  5. Android(安卓)Studio怎样提示函数使用方法
  6. J2me游戏如何快速移植到Android(安卓)(2)
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. 用Python和Pygame写游戏-从入门到精通(20)
  2. 是否可以使用argparse来捕获任意一组可选
  3. python题目——认识*与**,判断函数输出
  4. Python 基础第五天
  5. 支持c和python之间的跨语言(c)标记的代码
  6. 尝试使用python字典重新格式化JSON数据
  7. 使用pip安装tensorflow 0.80,python 使用t
  8. 显示一个矩阵,将一个共同因素放在同情中
  9. python通过get方式,post方式发送http请求
  10. 不同程序语言之间的互动,IronPython 与C#