滑动式界面和消息数视图
来源:互联网 发布:88端口怎么起 编辑:程序博客网 时间:2024/05/17 19:58
top1.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/top1_bg" > <LinearLayout android:layout_width="wrap_content" android:layout_height="50dip" android:gravity="center_vertical" android:orientation="horizontal" > <ImageView android:layout_width="32dip" android:layout_height="32dip" android:layout_marginLeft="10dip" android:src="@drawable/actionbar_icon" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:text="微信" android:textColor="#d3d3d3" android:textSize="15sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="50dip" android:layout_alignParentRight="true" android:gravity="center_vertical" android:orientation="horizontal" > <ImageView android:layout_width="32dip" android:layout_height="32dip" android:layout_marginLeft="10dip" android:src="@drawable/actionbar_search_icon" /> <ImageView android:layout_width="32dip" android:layout_height="32dip" android:layout_marginLeft="10dip" android:src="@drawable/actionbar_add_icon" /> <ImageView android:layout_width="32dip" android:layout_height="32dip" android:layout_marginLeft="10dip" android:src="@drawable/actionbar_more_icon" /> </LinearLayout></RelativeLayout>
Top2.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="48dip" android:background="#eee" android:orientation="horizontal" > <LinearLayout android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="horizontal" > <TextView android:id="@+id/id_tv_chat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="聊天" android:textColor="#009000" android:textSize="16dip" /> </LinearLayout> <LinearLayout android:id="@+id/id_ll_find" android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="horizontal" > <TextView android:id="@+id/id_tv_find" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发现" android:textColor="@android:color/black" android:textSize="16dip" /> </LinearLayout> <LinearLayout android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="horizontal" > <TextView android:id="@+id/id_tv_contact" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="通讯录" android:textColor="@android:color/black" android:textSize="16dip" /> </LinearLayout> </LinearLayout> <ImageView android:id="@+id/id_iv_tabline" android:layout_width="100dip" android:layout_height="2dip" android:background="@drawable/tabline" /></LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is first Tab" android:textSize="20sp" android:textColor="@android:color/black" /></LinearLayout>
MainActivity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <include layout="@layout/top1" /> <include layout="@layout/top2" /> <android.support.v4.view.ViewPager android:id="@+id/id_viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
MainActivity.java
package com.weixin_ui;import java.util.ArrayList;import com.jauker.widget.BadgeView;import android.graphics.Color;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.DisplayMetrics;import android.view.Display;import android.view.ViewGroup.LayoutParams;import android.view.Window;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class MainActivity extends FragmentActivity {private ViewPager mViewPager;private ArrayList<Fragment> mDatas;private FragmentPagerAdapter mAdapter;private TextView mChatTextView;private TextView mFindTextView;private TextView mContactTextView;private ImageView mTabline;private int mScreen1_3;private int mCurrentPageIndex;private LinearLayout mllFind;private BadgeView mBadgeView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView();}private void initView() {initTabline();mViewPager = (ViewPager) findViewById(R.id.id_viewPager);mDatas = new ArrayList<Fragment>();ChatTabFragment tab01 = new ChatTabFragment();FindTabFragment tab02 = new FindTabFragment();ContactTabFragment tab03 = new ContactTabFragment();mDatas.add(tab01);mDatas.add(tab02);mDatas.add(tab03);mChatTextView = (TextView) findViewById(R.id.id_tv_chat);mFindTextView = (TextView) findViewById(R.id.id_tv_find);mContactTextView = (TextView) findViewById(R.id.id_tv_contact);mllFind = (LinearLayout) findViewById(R.id.id_ll_find);mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {@Overridepublic int getCount() {return mDatas.size();}@Overridepublic Fragment getItem(int position) {return mDatas.get(position);}};mViewPager.setAdapter(mAdapter);mViewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {resetColor();switch (position) {case 0:mChatTextView.setTextColor(Color.parseColor("#009000"));break;case 1:if (mBadgeView != null) {mllFind.removeView(mBadgeView);}mBadgeView = new BadgeView(MainActivity.this);mBadgeView.setBadgeCount(16);mllFind.addView(mBadgeView);mFindTextView.setTextColor(Color.parseColor("#009000"));break;case 2:mContactTextView.setTextColor(Color.parseColor("#009000"));break;}mCurrentPageIndex = position;}private void resetColor() {mChatTextView.setTextColor(Color.BLACK);mFindTextView.setTextColor(Color.BLACK);mContactTextView.setTextColor(Color.BLACK);}@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPx) {LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) mTabline.getLayoutParams();if (mCurrentPageIndex == 0 && position == 0) {// 0-1lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + positionOffset* mScreen1_3);} else if (mCurrentPageIndex == 1 && position == 0) {// 1-0lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + (positionOffset - 1)* mScreen1_3);} else if (mCurrentPageIndex == 1 && position == 1) {// 1-2lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + positionOffset* mScreen1_3);} else if (mCurrentPageIndex == 2 && position == 1) {// 2-1lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + (positionOffset - 1)* mScreen1_3);}mTabline.setLayoutParams(lp);}@Overridepublic void onPageScrollStateChanged(int arg0) {}});}private void initTabline() {mTabline = (ImageView) findViewById(R.id.id_iv_tabline);Display display = getWindowManager().getDefaultDisplay();DisplayMetrics outMetrics = new DisplayMetrics();display.getMetrics(outMetrics);mScreen1_3 = outMetrics.widthPixels / 3;LayoutParams lp = mTabline.getLayoutParams();lp.width = mScreen1_3;mTabline.setLayoutParams(lp);}}
ChatTabFragment...
package com.weixin_ui;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;public class ChatTabFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view =inflater.inflate(R.layout.tab01, container, false);return view;}}------------------------------------------------------------------------------------------------------------
BadgeView
/* * BadgeView.java * BadgeView * * Copyright (c) 2012 Stefan Jauker. * https://github.com/kodex83/BadgeView * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.jauker.widget;import android.content.Context;import android.graphics.Color;import android.graphics.Typeface;import android.graphics.drawable.ShapeDrawable;import android.graphics.drawable.shapes.RoundRectShape;import android.util.AttributeSet;import android.util.Log;import android.util.TypedValue;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.FrameLayout.LayoutParams;import android.widget.TabWidget;import android.widget.TextView;public class BadgeView extends TextView { private boolean mHideOnNull = true; public BadgeView(Context context) { this(context, null); } public BadgeView(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.textViewStyle); } public BadgeView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { if (!(getLayoutParams() instanceof LayoutParams)) { LayoutParams layoutParams = new LayoutParams( android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.TOP); setLayoutParams(layoutParams); } // set default font setTextColor(Color.WHITE); setTypeface(Typeface.DEFAULT_BOLD); setTextSize(TypedValue.COMPLEX_UNIT_SP, 11); setPadding(dip2Px(5), dip2Px(1), dip2Px(5), dip2Px(1)); // set default background setBackground(9, Color.parseColor("#d3321b")); setGravity(Gravity.CENTER); // default values setHideOnNull(true); setBadgeCount(0); } @SuppressWarnings("deprecation") public void setBackground(int dipRadius, int badgeColor) { int radius = dip2Px(dipRadius); float[] radiusArray = new float[] { radius, radius, radius, radius, radius, radius, radius, radius }; RoundRectShape roundRect = new RoundRectShape(radiusArray, null, null); ShapeDrawable bgDrawable = new ShapeDrawable(roundRect); bgDrawable.getPaint().setColor(badgeColor); setBackgroundDrawable(bgDrawable); } /** * @return Returns true if view is hidden on badge value 0 or null; */ public boolean isHideOnNull() { return mHideOnNull; } /** * @param hideOnNull the hideOnNull to set */ public void setHideOnNull(boolean hideOnNull) { mHideOnNull = hideOnNull; setText(getText()); } /* * (non-Javadoc) * * @see android.widget.TextView#setText(java.lang.CharSequence, android.widget.TextView.BufferType) */ @Override public void setText(CharSequence text, BufferType type) { if (isHideOnNull() && (text == null || text.toString().equalsIgnoreCase("0"))) { setVisibility(View.GONE); } else { setVisibility(View.VISIBLE); } super.setText(text, type); } public void setBadgeCount(int count) { setText(String.valueOf(count)); } public Integer getBadgeCount() { if (getText() == null) { return null; } String text = getText().toString(); try { return Integer.parseInt(text); } catch (NumberFormatException e) { return null; } } public void setBadgeGravity(int gravity) { FrameLayout.LayoutParams params = (LayoutParams) getLayoutParams(); params.gravity = gravity; setLayoutParams(params); } public int getBadgeGravity() { FrameLayout.LayoutParams params = (LayoutParams) getLayoutParams(); return params.gravity; } public void setBadgeMargin(int dipMargin) { setBadgeMargin(dipMargin, dipMargin, dipMargin, dipMargin); } public void setBadgeMargin(int leftDipMargin, int topDipMargin, int rightDipMargin, int bottomDipMargin) { FrameLayout.LayoutParams params = (LayoutParams) getLayoutParams(); params.leftMargin = dip2Px(leftDipMargin); params.topMargin = dip2Px(topDipMargin); params.rightMargin = dip2Px(rightDipMargin); params.bottomMargin = dip2Px(bottomDipMargin); setLayoutParams(params); } public int[] getBadgeMargin() { FrameLayout.LayoutParams params = (LayoutParams) getLayoutParams(); return new int[] { params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin }; } public void incrementBadgeCount(int increment) { Integer count = getBadgeCount(); if (count == null) { setBadgeCount(increment); } else { setBadgeCount(increment + count); } } public void decrementBadgeCount(int decrement) { incrementBadgeCount(-decrement); } /* * Attach the BadgeView to the TabWidget * * @param target the TabWidget to attach the BadgeView * * @param tabIndex index of the tab */ public void setTargetView(TabWidget target, int tabIndex) { View tabView = target.getChildTabViewAt(tabIndex); setTargetView(tabView); } /* * Attach the BadgeView to the target view * * @param target the view to attach the BadgeView */ public void setTargetView(View target) { if (getParent() != null) { ((ViewGroup) getParent()).removeView(this); } if (target == null) { return; } if (target.getParent() instanceof FrameLayout) { ((FrameLayout) target.getParent()).addView(this); } else if (target.getParent() instanceof ViewGroup) { // use a new Framelayout container for adding badge ViewGroup parentContainer = (ViewGroup) target.getParent(); int groupIndex = parentContainer.indexOfChild(target); parentContainer.removeView(target); FrameLayout badgeContainer = new FrameLayout(getContext()); ViewGroup.LayoutParams parentlayoutParams = target.getLayoutParams(); parentContainer.addView(badgeContainer, groupIndex, parentlayoutParams); badgeContainer.addView(target); badgeContainer.addView(this); } else if (target.getParent() == null) { Log.e(getClass().getSimpleName(), "ParentView is needed"); } } /* * converts dip to px */ private int dip2Px(float dip) { return (int) (dip * getContext().getResources().getDisplayMetrics().density + 0.5f); }}
需要源码包点这里:
http://yunpan.cn/cycnVWIfEI8YJ 访问密码 135a
0 0
- 滑动式界面和消息数视图
- Android学习笔记-ScollView实现QQ消息界面滑动效果
- 滑动视图的基本概念和用法
- 21.UIScrollView(滑动视图)和UIPageControl()
- ViewFlipper界面自动切换和滑动切换
- 滑动界面
- 滑动界面
- android 更新界面视图 Handler和runOnUiThread
- android 更新界面视图 Handler和runOnUiThread
- MFC中视图分割和视图间消息传递
- MFC中视图分割和视图间消息传递
- 锁屏界面弹出视图实践---类似QQ锁屏界面弹出消息提示框
- 读取手机短信和自定义消息界面
- 滑动视图的循环滑动
- UIscrollview的滑动 视图会出现和消失
- ViewDragHelper_v4的滑动视图帮助类_解释和代码
- 滑动视图和表示图的综合应用
- 滚动视图上滑动改变导航条颜色和透明度
- OpenDingux 编译
- matlab中的BP神经网络
- C/C++变量命名规范
- 软件测试从零开始
- BZOJ 2157 旅游 树链剖分
- 滑动式界面和消息数视图
- Servlet中filter过滤<dispatcher>FORWARD</dispatcher>标签使用
- glViewport
- linux服务器切换用户只显示-bash-4.1#不显示路径
- RankLib源码分析---MART(GBRT)
- 二叉查找树、红黑树、B树、B+树、AVL树
- Leetcode -- Remove Nth Node From End of List
- OpenGL 房子
- table的HTML5+css3的可用样式