关于仿微信滑动切换View页面的问题

PogbaLiu 2016-10-27 09:51:27
大家好,我有个问题困扰自己很久了,因为自身水平有限,也刚学习android不久,所以真心向大家请教一下

如图所示


这是我自己弄得一个项目,然后项目底部的导航栏是引入的github第三方项目,地址是https://github.com/armcha/Space-Navigation-View,我想实现微信那种滑动可以切换View页面,同时底部栏的图标和文字也会跟随页面变化,但是底部栏的图标和文字跟随页面变化这一功能我一直实现不了。点击图标跳转到相应页面倒是实现了,我查看那个第三方项目源码,但水平有限,看的不是全部都懂,但还是实现不了跟随切换的功能。第三方项目我是作为module导入自己的项目,修改其中的源码来实现跟随切换功能。下面我会给出与跟随切换功能相关代码,望各位大神指教!如果能帮我看一下那个地址的源码再来解决这个问题就更好了,小弟子在下谢谢大家!

下面给出源码(自己的项目)
MainActivity.java
import android.content.Context;
import android.graphics.Color;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.luseen.spacenavigation.SpaceItem;
import com.luseen.spacenavigation.SpaceNavigationView;
import com.luseen.spacenavigation.SpaceOnClickListener;
import com.luseen.spacenavigation.Utils;

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

public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{
private SpaceNavigationView spaceNavigationView;
private ViewPager viewPager;
private ContentAdapter adapter;
private List<View> views;
private List<SpaceItem> spaceItemsList = new ArrayList<>();
private List<View> spaceItemLayout=new ArrayList<>();
private Context mContext;
LayoutInflater inflater;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext=getApplicationContext();
inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initView(savedInstanceState);
initEvent();
}

@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
spaceNavigationView.onSaveInstanceState(outState);
}

private void initView(Bundle savedInstanceState){
spaceNavigationView=(SpaceNavigationView)findViewById(R.id.space);
spaceNavigationView.initWithSaveInstanceState(savedInstanceState);

SpaceItem homeSpace=new SpaceItem("首页",R.drawable.home);
spaceNavigationView.addSpaceItem(homeSpace);
spaceItemsList.add(homeSpace);
spaceItemLayout.add(homeSpace.getTextAndIconContainer(inflater));

SpaceItem classSpace=new SpaceItem("分类",R.drawable.classify);
spaceNavigationView.addSpaceItem(classSpace);
spaceItemsList.add(classSpace);
spaceItemLayout.add(classSpace.getTextAndIconContainer(inflater));

SpaceItem discoverySpace=new SpaceItem("发现",R.drawable.discovery);
spaceNavigationView.addSpaceItem(discoverySpace);
spaceItemsList.add(discoverySpace);
spaceItemLayout.add(discoverySpace.getTextAndIconContainer(inflater));

SpaceItem personalSpace=new SpaceItem("我的",R.drawable.me);
spaceNavigationView.addSpaceItem(personalSpace);
spaceItemsList.add(personalSpace);
spaceItemLayout.add(personalSpace.getTextAndIconContainer(inflater));

spaceNavigationView.shouldShowFullBadgeText(true);
spaceNavigationView.setCentreButtonIconColorFilterEnabled(false);

this.viewPager=(ViewPager)findViewById(R.id.content);

View pageHome=View.inflate(MainActivity.this,R.layout.home_page,null);
View pageClassify=View.inflate(MainActivity.this,R.layout.classify_page,null);
View pageDiscovery=View.inflate(MainActivity.this,R.layout.discovery_page,null);
View pagePersonal=View.inflate(MainActivity.this,R.layout.personal_page,null);



views=new ArrayList<View>();
views.add(pageHome);
views.add(pageClassify);
views.add(pageDiscovery);
views.add(pagePersonal);

this.adapter=new ContentAdapter(views);
viewPager.setAdapter(adapter);
}

private void initEvent(){
spaceNavigationView.setSpaceOnClickListener(new SpaceOnClickListener() {
@Override
public void onCentreButtonClick() {
Toast.makeText(getApplicationContext(),"你点击了发布",Toast.LENGTH_SHORT).show();
}

@Override
public void onItemClick(int itemIndex, String itemName) {
viewPager.setCurrentItem(itemIndex);
}

@Override
public void onItemReselected(int itemIndex, String itemName) {

}
});
viewPager.setOnPageChangeListener(this);
}

@Override
public void onPageScrollStateChanged(int arg0){

}

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

}

@Override
public void onPageSelected(int arg0){
//在View滑动切换时设置spaceItem变色
Toast.makeText(getApplicationContext(),spaceItemsList.get(arg0).getItemName(),Toast.LENGTH_SHORT).show();
RelativeLayout content=(RelativeLayout)spaceItemLayout.get(arg0);
ImageView spaceItemIcon = (ImageView) content.findViewById(R.id.space_icon);
TextView spaceItemText = (TextView) content.findViewById(R.id.space_text);
spaceItemText.setTextColor(Color.parseColor("#f44336"));
Utils.changeImageViewTint(spaceItemIcon, Color.parseColor("#f44336"));
}
}


SpaceItem.java(第三方项目源码)
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

import java.io.Serializable;

public class SpaceItem implements Serializable {

private RelativeLayout textAndIconContainer;

private String itemName;

private int itemIcon;

public SpaceItem(String itemName, int itemIcon) {
this.itemName = itemName;
this.itemIcon = itemIcon;
}

public String getItemName() {
return itemName;
}

public void setItemName(String itemName) {
this.itemName = itemName;
}

public int getItemIcon() {
return itemIcon;
}

public void setItemIcon(int itemIcon) {
this.itemIcon = itemIcon;
}

public RelativeLayout getTextAndIconContainer(LayoutInflater inflater){
textAndIconContainer = (RelativeLayout) inflater.inflate(R.layout.space_item_view, null);
return textAndIconContainer;
}
}


SpaceNavigationView.java(第三方项目源码片段)




...全文
566 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
PogbaLiu 2016-10-28
  • 打赏
  • 举报
回复
引用 13 楼 SEU_Calvin 的回复:
楼主,源码的分析过程和问题的解决方案已经发你邮箱了,请查收。
感谢你的帮忙
Oharasakurako 2016-10-28
  • 打赏
  • 举报
回复
radiogroup过时了?,难道这是2026年
SEU_Calvin 2016-10-27
  • 打赏
  • 举报
回复
私信说吧,看下私信
PogbaLiu 2016-10-27
  • 打赏
  • 举报
回复
引用 6 楼 SEU_Calvin 的回复:
我看这个第三方库里有点击监听,spaceNavigationView.setSpaceOnClickListener(new SpaceOnClickListener() { @Override
public void onCentreButtonClick() { } ...}
你把new SpaceOnClickListener()实例化为mOnClickListener,把它传给处理滑动上部分界面的类中,在处理滑动时回调mOnClickListener.onCentreButtonClick()就可以了。
你好,你意思是把滑动模拟成点击相应页面。如图所示,我改了代码,但是没效果
SEU_Calvin 2016-10-27
  • 打赏
  • 举报
回复
我看这个第三方库里有点击监听,spaceNavigationView.setSpaceOnClickListener(new SpaceOnClickListener() { @Override public void onCentreButtonClick() { } ...} 你把new SpaceOnClickListener()实例化为mOnClickListener,把它传给处理滑动上部分界面的类中,在处理滑动时回调mOnClickListener.onCentreButtonClick()就可以了。
PogbaLiu 2016-10-27
  • 打赏
  • 举报
回复
引用 3 楼 bigtree_mfc 的回复:
楼主不用那么复杂,乱七八糟的代码太多了。 类似下面这个很简单。 http://www.cnblogs.com/shenliangwei/p/4280655.html
我想用到上面那个第三方项目,我还不会自定义一个控件,我想用效果好点的底部栏
PogbaLiu 2016-10-27
  • 打赏
  • 举报
回复
引用 2 楼 SEU_Calvin 的回复:
上面切换的是ViewPager,说错了。
你好,我想用到上面那个底部栏,我自己还不会自定义组件,还有我听说RadioGroup已经过时了,说不要用
大树学长 2016-10-27
  • 打赏
  • 举报
回复
楼主不用那么复杂,乱七八糟的代码太多了。 类似下面这个很简单。 http://www.cnblogs.com/shenliangwei/p/4280655.html
SEU_Calvin 2016-10-27
  • 打赏
  • 举报
回复
上面切换的是ViewPager,说错了。
SEU_Calvin 2016-10-27
  • 打赏
  • 举报
回复
楼主,这个功能很容易实现的,底部使用RadioGroup,放入RadioButton,根据它们的android:checked属性再改变颜色就行了。 上面切换不同的Fragment即可。
SEU_Calvin 2016-10-27
  • 打赏
  • 举报
回复
楼主,源码的分析过程和问题的解决方案已经发你邮箱了,请查收。
秃头地中海 2016-10-27
  • 打赏
  • 举报
回复
FlycoTabLayout值得你拥有
PogbaLiu 2016-10-27
  • 打赏
  • 举报
回复
引用 10 楼 bigtree_mfc 的回复:
[quote=引用 5 楼 qq_29838777 的回复:] [quote=引用 3 楼 bigtree_mfc 的回复:] 楼主不用那么复杂,乱七八糟的代码太多了。 类似下面这个很简单。 http://www.cnblogs.com/shenliangwei/p/4280655.html
我想用到上面那个第三方项目,我还不会自定义一个控件,我想用效果好点的底部栏[/quote] 效果好不好看,只要显示的图片好不好看就可以了,外观都是美工的事,先把功能做出来,后面的都好说[/quote]你好,当你在设计界面时,你就是一个美工了
大树学长 2016-10-27
  • 打赏
  • 举报
回复
引用 5 楼 qq_29838777 的回复:
[quote=引用 3 楼 bigtree_mfc 的回复:] 楼主不用那么复杂,乱七八糟的代码太多了。 类似下面这个很简单。 http://www.cnblogs.com/shenliangwei/p/4280655.html
我想用到上面那个第三方项目,我还不会自定义一个控件,我想用效果好点的底部栏[/quote] 效果好不好看,只要显示的图片好不好看就可以了,外观都是美工的事,先把功能做出来,后面的都好说
疯狂的兔子ccc 2016-10-27
  • 打赏
  • 举报
回复
楼主可以看下这个,之前我做的仿微信底部导航栏就是用了他的方法做的 http://blog.csdn.net/why200981317/article/details/51582128

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧