慕课网高仿微信学习笔记

1.    微信中的点击这种的效果图,

tab1.xml中:

<LinearLayout
android:orientation="horizontal">
<LinearLayout>
        <TextView
               android:text="聊天"/>
</LinearLayout>
<LinearLayout>
        <TextView
               android:text="发现"/>
</LinearLayout>
<LinearLayout>
        <TextView
               android:text="通讯录"/>
</LinearLayout>
 
<ImageView/> à 这个ImageView中的宽度是要在代码中改变的,要改变的宽度和TextView一样
 
</LinearLayout>





2.    res/tabl.xml 这是一个布局文件,res/activity_main.xml这是主界面,则要在主界面中包含tab1.xml界面:<includelayout=”@layout/tab1”>

3.    这部分的使用ViewPager,它可以实现滑动切换,用来切换时的加载不同的Fragment,

有三个Fragment:ChatMainFragment.java 这个是第一个聊天的Fragment,对应的XML文件为:res/tab01.xml;其他两个同第一个。

4.    MainActivity中:ViewPager是android.support.v4.view.ViewPager下的包或者是android.view.ViewPager的包,包要相同。

5.    MainActivity:

private ViewPager mViewPager; à 这个是装Fragment的
private FragemntPagerAdapter mAdapter;à 这个是ViewPager的适配器
eg.mAdapter=new FragmentPagerAdapter(getSupportFragmentManager())
        {
               @Override
               publicint getCount()
               {
                      returnmDatas.size();
               }
 
               @Override
               publicFragment getItem(int arg0)
               {
                      returnmDatas.get(arg0);
               }
        };
privateList<Fragment> mDatas; à 这个是每一个Fragment的类,这些类实例化的对象保存在这里:
eg. ChatMainActivity tab01 = newChatMainActivity();
       mDatas.add(tab01);
 
最後mViewPager.setAdapter(mAdapter);


6.     mViewPager.setOnPageChangeListener(newOnPageChangeListener() 为ViewPager注册事件,

@Override
               publicvoid onPageSelected(int position)
               {
resetTextView();à这是一个自定义函数,为了将三个TextView中的字体全变成黑色
                      switch(position)
                      {
case 0: à当滑动到第一个面板时:
 
                             if(mBadgeView != null)
                             {
                                    mChatLinearLayout.removeView(mBadgeView);
                             }
                             mBadgeView= new BadgeView(MainActivity.this);
                             mBadgeView.setBadgeCount(7);
                             mChatLinearLayout.addView(mBadgeView);
 
mChatTextView.setTextColor(Color.parseColor("#008000"));
                             break;
                      case1:
                             mFriendTextView.setTextColor(Color.parseColor("#008000"));
                             break;
                      case2:
                             mContactTextView.setTextColor(Color.parseColor("#008000"));
                             break;
 
                      }


7.    这个显示聊天数目的需要用到一个BadgeView的效果,这个要在Gitub中下载这个项目然后把这的项目导入到目前项目中,

首先:在本项目中右击找到propertity 中点击Android然后在最后的isLibrary中导入其实就是导入badgeView.jar的包,其中可能与android.support.v4.jar包冲突,所以要删除libs目录下的android.support.v4.jar包

badgeview项目下载路径:https://github.com/stefanjauker/BadgeView

(我实验时的做法:由于试了很久上面的办法没有用,错误为下所以经过找资料等过程后动作如下:

在上面网址下了ZIP包后,找到其中的BadgeView项目,然后将这个项目中BadgeView.java这个文件的包package拷贝到要自己的项目src下,即可使用

但依然没有出现上述效果,如果有人解决了请告之)

 

8.    下面实现那个蓝色的底条纹随滑动而变化位置

它的原理是 ImageView的android.margLeft = “XX.dp”

所以要在代码中动态的将ImageView的margLeft随滑动的距离左边的距离变大

shift+Alt+n 可以将一段代码变成一个方法

其中下面代码的mScreen1_3是手机屏幕的宽度的三分之一

privateint mScreen1_3;
Display display =getWindow().getWindowManager().getDefaultDisplay();
        DisplayMetricsoutMetrics = new DisplayMetrics();
        display.getMetrics(outMetrics);
        mScreen1_3= outMetrics.widthPixels / 3;
        LayoutParamslp = mTabline.getLayoutParams();
        lp.width= mScreen1_3;
        mTabline.setLayoutParams(lp);à mTabline是那个蓝色底线
 
 
 

</pre><pre name="code" class="java">下面是ViewPager的OnPagerChangeListener
监听事件方法:(不知怎么这里总是显示为代码)
/**
			 * 当滑动页面后,此时滑动的动作已经停止,则现在停在滑动后的页面中
			 */
			@Override
			public void onPageSelected(int position) {
				// TODO Auto-generated method stub
				MainActivity.this.setTabColor();
				switch (position) {
				case 0:
					if(badgeView!=null)
					{
						mLinearLayout.removeView(badgeView);
					}
					badgeView = new com.jauker.widget.BadgeView(MainActivity.this);
					badgeView.setBadgeCount(4);
					mLinearLayout.addView(badgeView);
					MainActivity.this.chat.setTextColor(Color
							.parseColor("#008000"));
					break;
				case 1:
					if(badgeView!=null)
					{
						mLinearLayout.removeView(badgeView);
					}
					badgeView = new com.jauker.widget.BadgeView(MainActivity.this);
					badgeView.setBadgeCount(4);
					mLinearLayout.addView(badgeView);
					MainActivity.this.record.setTextColor(Color
							.parseColor("#008000"));
					break;
				case 2:
					if(badgeView!=null)
					{
						mLinearLayout.removeView(badgeView);
					}
					badgeView = new com.jauker.widget.BadgeView(MainActivity.this);
					badgeView.setBadgeCount(4);
					mLinearLayout.addView(badgeView);
					MainActivity.this.find.setTextColor(Color
							.parseColor("#008000"));
					break;
				}
				currentPage = position;
			}

			@Override
			public void onPageScrolled(int position, float positionOffset,
					int positionOffsetPx) {
				// TODO Auto-generated method stub

//				System.out.println("position:" + position + " positionOffset:"
//						+ positionOffset + " positionOffsetPx:"
//						+ positionOffsetPx);
				// 取得tabline的位置参数
				LinearLayout.LayoutParams lp = (LayoutParams) tabline
						.getLayoutParams();

				if (currentPage == 0 && position == 0)// 从第一页滑到第二页
				{
					lp.leftMargin = (int) (positionOffset * mScreen + currentPage
							* mScreen);
				} else if (currentPage == 1 && position == 0) {// 从第二页滑到第一页
					lp.leftMargin = (int) (currentPage * mScreen + (positionOffset - 1)
							* mScreen);
				} else if (currentPage == 1 && position == 1)// 从第二页滑动到第三页
				{
					lp.leftMargin = (int) (positionOffset * mScreen + currentPage
							* mScreen);
				} else if (currentPage == 2 && position == 1) {// 从第三页到第二页
					lp.leftMargin = (int) (currentPage * mScreen + (positionOffset - 1)
							* mScreen);
				}
				tabline.setLayoutParams(lp);
			}


 由于这里没有办法粘贴图片所以上面的图片就没有了 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值