使用ViewPage+Fragment仿微信界面

本文实例为大家分享了ViewPage+Fragment仿微信界面的具体代码,供大家参考,具体内容如下

实现效果:

左右滑动可切换界面,点击也可以实现

界面与碎片:

主界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context="com.example.g160628_android10_viewpagerfragment_zuoye.MainActivity">
 <!--设置ViewPager与单选组-->
 <android.support.v4.view.ViewPager
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/vp_main_view"
  android:layout_weight="1"
  ></android.support.v4.view.ViewPager>
 <RadioGroup
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:id="@+id/rg_main_group"
  >
  <RadioButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:button="@null"
   android:background="@drawable/button_selector"
   android:id="@+id/rb_main_bu1"
   />
  <RadioButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:button="@null"
   android:background="@drawable/button2_selector"
   android:id="@+id/rb_main_bu2"
   />
  <RadioButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:button="@null"
   android:background="@drawable/button3_selector"
   android:id="@+id/rb_main_bu3"
   />
  <RadioButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:button="@null"
   android:background="@drawable/button4_selector"
   android:id="@+id/rb_main_bu4"
   />
 </RadioGroup> 

</LinearLayout>

在drawable中创建四个选择器

button_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_checked="false" android:drawable="@drawable/small_weixin"></item>
 <item android:state_checked="true" android:drawable="@drawable/small_weixin2"></item>
</selector>

button2_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_checked="false" android:drawable="@drawable/small_contact"></item>
 <item android:state_checked="true" android:drawable="@drawable/small_contact2"></item>
</selector>

button3_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_checked="false" android:drawable="@drawable/small_find"></item>
 <item android:state_checked="true" android:drawable="@drawable/small_find2"></item>
</selector>

button4_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_checked="false" android:drawable="@drawable/small_mine"></item>
 <item android:state_checked="true" android:drawable="@drawable/small_mine2"></item>
</selector>

四个碎片:

fragment_weixin.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">
 <ImageView
  android:layout_width="470dp"
  android:layout_height="720dp"
  android:src="@drawable/weixin"
  />
</LinearLayout>

fragment_contact.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">
 <ImageView
  android:layout_width="470dp"
  android:layout_height="720dp"
  android:src="@drawable/contact"
  />
</LinearLayout>

fragment_find.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">
 <ImageView
  android:layout_width="470dp"
  android:layout_height="720dp"
  android:src="@drawable/find"
  />
</LinearLayout>

fragment_mine.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">
 <ImageView
  android:layout_width="470dp"
  android:layout_height="720dp"
  android:src="@drawable/mine"
  />
</LinearLayout>

Java代码

主Activity:

package com.example.g160628_android10_viewpagerfragment_zuoye; 

import android.content.res.Resources;
import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup; 

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

public class MainActivity extends AppCompatActivity {
 private List<Fragment> fragments=new ArrayList<>();
 private ViewPager vp_main_view;
 private RadioGroup rg_main_group;
 private List<View> views; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  //把碎片加入到碎片集合中
  fragments.add(new WeiXinFragment());
  fragments.add(new ContactFragment());
  fragments.add(new FindFragment());
  fragments.add(new MineFragment()); 

  //找到自己的ViewPager
  vp_main_view = (ViewPager) findViewById(R.id.vp_main_view);
  vp_main_view.setAdapter(new MyAdapter(getSupportFragmentManager()));
  //设置当前的碎片为1
  vp_main_view.setCurrentItem(1); 

  //获得单选按钮组
  rg_main_group = (RadioGroup) findViewById(R.id.rg_main_group);
  //设置单选按钮组的选择事件
  rg_main_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
   @Override
   public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
    Resources res=MainActivity.this.getResources();
    switch (checkedId) {
     case R.id.rb_main_bu1:
      vp_main_view.setCurrentItem(0);
      break;
     case R.id.rb_main_bu2:
      vp_main_view.setCurrentItem(1);
      break;
     case R.id.rb_main_bu3:
      vp_main_view.setCurrentItem(2);
      break;
     case R.id.rb_main_bu4:
      vp_main_view.setCurrentItem(3);
      break;
    }
   }
  }); 

  //获得所有的单选框
  views=rg_main_group.getTouchables(); 

  //设置单选框事件
  vp_main_view.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
   @Override
   public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

   } 

   @Override
   public void onPageSelected(int position) {
    //设置选中
    RadioButton button= (RadioButton) views.get(position);
    button.setChecked(true);
   } 

   @Override
   public void onPageScrollStateChanged(int state) { 

   }
  }); 

 } 

 //定义属于自己的适配器
 class MyAdapter extends FragmentPagerAdapter{ 

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

  //获得碎片的所有
  @Override
  public Fragment getItem(int position) {
   return fragments.get(position);
  } 

  //返回碎片的长度
  @Override
  public int getCount() {
   return fragments.size();
  }
 } 

}

四个碎片对应的Fragment

WeiXinFragment

package com.example.g160628_android10_viewpagerfragment_zuoye; 

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 Administrator on 2017/6/15.
 */ 

public class WeiXinFragment extends Fragment {
 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  //返回对应的fragment_weixin
  return inflater.inflate(R.layout.fragment_weixin,null);
 }
}

ContactFragment

package com.example.g160628_android10_viewpagerfragment_zuoye; 

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 Administrator on 2017/6/15.
 */ 

public class ContactFragment extends Fragment {
 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  //返回对应的fragment_contact
  return inflater.inflate(R.layout.fragment_contact,null);
 }
} 

FindFragment

package com.example.g160628_android10_viewpagerfragment_zuoye; 

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 Administrator on 2017/6/15.
 */ 

public class FindFragment extends Fragment {
 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  //返回对应的fragment_find
  return inflater.inflate(R.layout.fragment_find,null);
 }
}

MineFragment

package com.example.g160628_android10_viewpagerfragment_zuoye; 

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 Administrator on 2017/6/15.
 */ 

public class MineFragment extends Fragment {
 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  //返回对应的fragment_mine
  return inflater.inflate(R.layout.fragment_mine,null);
 }
}

需要的图片

small_weixin   small_contact   small_find    small_mine

剩下的自己去截了,就不一一展示了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • ViewPager+RadioGroup仿微信主界面
  • Android UI设计与开发之ViewPager仿微信引导界面以及动画效果
  • ViewPager 与 Fragment相结合实现微信界面实例代码
(0)

相关推荐

  • ViewPager+RadioGroup仿微信主界面

    话不多说,先上图,如图效果,可以点击底部按钮选择页面,也可以滑动页面进行选择. 那么我们下面就来实现一下吧. 首先创建工程WXTest,主界面布局使用ViewPager+RadioGroup来实现,界面代码如下. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android UI设计与开发之ViewPager仿微信引导界面以及动画效果

    基于前两篇比较简单的实例做铺垫之后,这一篇我们来实现一个稍微复杂一点的引导界面的效果,当然也只是稍微复杂了一点,对于会的人来说当然还是so easy!正所谓会者不难,难者不会,大概说的就是这个意思了吧.好的,话不多说,回归正题. 这篇要实现的是一个仿微信的动画效果,虽然这种效果的实现在网上到处都有,但是我还是想站在中低端开发者的角度去告诉大家是如何实现的,当然实现的方式有很多,我也只是列出了我认为实现起来比较方便的一种方法,希望大家能够受用. 一.实现的效果图 有图才有真相,上图先: 点击按钮后

  • ViewPager 与 Fragment相结合实现微信界面实例代码

    在如今的互联网时代,微信已是一个超级App.这篇通过ViewPager + Fragment实现一个类似于微信的界面,之前有用FragmentTabHost实现过类似界面,ViewPager的实现方式相对于FragmentTabHost的方式更简单明了. ViewPager: ViewPager继承自ViewGroup,是一个容器类,可以往里添加View. ViewPager的使用很简单,通过setAdapter()方法设置一个PagerAdapter即可,这个PagerAdapter需要自己写

  • 使用ViewPage+Fragment仿微信界面

    本文实例为大家分享了ViewPage+Fragment仿微信界面的具体代码,供大家参考,具体内容如下 实现效果: 左右滑动可切换界面,点击也可以实现 界面与碎片: 主界面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="h

  • Android仿微信界面的导航以及右上角菜单栏效果

    下面是安卓开发仿微信界面的代码. 分为3步, 第一步是界面的编写; 第二步是导航界面; 第三步是右上角菜单栏. 开始第一步前先预览一下效果. 第一步,界面. 界面的思路是利用ViewPager+Fragment实现,所以activity_main.xml中添加一个ViewPager.顶部和底部include的顶部栏和底部栏后面再说. MainActivity的界面activity_main.xml: <?xml version="1.0" encoding="utf-8

  • react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面

    一.前言 9月,又到开学的季节.为每个一直默默努力的自己点赞!最近都沉浸在react native原生app开发中,之前也有使用vue/react/angular等技术开发过聊天室项目,另外还使用RN技术做了个自定义模态弹窗rnPop组件. 一.项目简述 基于react+react-native+react-navigation+react-redux+react-native-swiper+rnPop等技术开发的仿微信原生App界面聊天室--RN_ChatRoom,实现了原生app启动页.As

  • Android 使用Fragment模仿微信界面的实例代码

    什么是Fragment 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片.片段.其目的是为了解决不同屏幕分辩率的动态和灵活UI设计.大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments . fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activit

  • android 中viewpager+fragment仿微信底部TAG完美渐变

    viewpager+fragment仿微信底部TAG完美渐变,在图片渐变的同时字的颜色也在变,注意,是渐变哦! 效果图: activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:zhy="http://schemas.android.com/apk/res/com.Sing.weixin" xmlns:tools="

  • Android App仿微信界面切换时Tab图标变色效果的制作方法

    概述 1.概述 学习Android少不了模仿各种app的界面,自从微信6.0问世以后,就觉得微信切换时那个变色的Tab图标屌屌的,今天我就带大家自定义控件,带你变色变得飞起~~ 好了,下面先看下效果图: 清晰度不太好,大家凑合看~~有木有觉得这个颜色弱爆了了的,,,下面我动动手指给你换个颜色: 有没有这个颜色比较妖一点~~~好了~下面开始介绍原理. 2.原理介绍 通过上面的效果图,大家可能也猜到了,我们的图标并非是两张图片,而是一张图,并且目标颜色是可定制的,谁让现在动不动就谈个性化呢. 那么我

  • Android仿微信主界面的实现方法

    本文实例为大家分享了Android模仿微信主界面展示的具体代码,供大家参考,具体内容如下 先看一下效果图 实现的原理: ViewPager+FragmentPagerAdapter 主界面可分为三部分: top标题栏就是一个TextView 中间的ViewPager作为显示的容器,填充Fragment bottom是一个RadioGroup 这里为了布局的优化,将top和bottom抽取出来 ,然后用include将其导入主布局,如下 <LinearLayout xmlns:android=&quo

  • Android用ActionBar高仿微信主界面的实例代码

    经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很难说.那么不用担心,本篇文章我就将带领大家一起进入ActionBar的应用实战,将理论和实践完美结合到一起. 如果你还没有看过我的前两篇文章,建议先去阅读一下 Android ActionBar完全解析使用官方推荐的最佳导航栏(上)和 Android ActionBar完全解析使用官方推荐的最佳导航

  • react+redux仿微信聊天界面

    一.项目概况 基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+react-photoswipe+swiper等技术混合开发的手机端仿微信界面聊天室--reactChatRoom,实现了聊天记录下拉刷新.发送消息.表情(动图),图片.视频预览,打赏.红包等功能. 二.技术栈MVVM框架: react / react-dom状态管理:redux / react-redux页面路由:react-router-dom弹窗插件

随机推荐