Android新闻客户端水平导航条效果
来源:互联网 发布:云计算用到的技术 编辑:程序博客网 时间:2024/05/29 18:50
核心代码:
package com.liuyk.widget;import android.content.Context;import android.graphics.Color;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import java.util.ArrayList;/** * 水平滚动栏 * * @author liuyk */public abstract class HorizontalNavigationBar<T> extends HorizontalScrollView { //分割线颜色 protected int mSplitColor = Color.RED; private int mCurrentPosition = -1; private LinearLayout mItemViewContainer; private OnHorizontalNavigationSelectListener mOnHorizontalNavigationSelectListener; /** * 是否有下划线 */ private boolean isChannelSplit; private ArrayList<T> mItems; public HorizontalNavigationBar(Context paramContext) { this(paramContext, null); } public HorizontalNavigationBar(Context paramContext, AttributeSet paramAttributeSet) { this(paramContext, paramAttributeSet, 0); } public HorizontalNavigationBar(Context paramContext, AttributeSet paramAttributeSet, int paramInt) { super(paramContext, paramAttributeSet, paramInt); initView(); } private void initView() { View view = LayoutInflater.from(getContext()).inflate(R.layout.horizontal_navigation_container, this); mItemViewContainer = (LinearLayout) view.findViewById(R.id.horizontal_navigation_container); } @Override protected void onFinishInflate() { super.onFinishInflate(); } public void setItems(ArrayList<T> items) { if (items == null) return; this.mItems = items; this.mItemViewContainer.removeAllViews(); for (int i = 0; i < items.size(); i++) { final HorizontalNavigationItemView itemView = new HorizontalNavigationItemView(getContext()); itemView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT)); itemView.setChannelSplit(isChannelSplit); itemView.setSplitColor(mSplitColor); renderingItemView(itemView, i, mCurrentPosition); final int index = i; itemView.setOnClickListener(new OnClickListener() { public void onClick(View paramAnonymousView) { HorizontalNavigationBar.this.setCurrentChannelItem(index); if (mOnHorizontalNavigationSelectListener != null) { mOnHorizontalNavigationSelectListener.select(index); } } }); this.mItemViewContainer.addView(itemView); } scrollTo(0, 0); } public void setCurrentChannelItem(int index) { int childCount = this.mItemViewContainer.getChildCount(); if (index > childCount - 1) { throw new RuntimeException("position more size"); } if (index == this.mCurrentPosition) { return; } this.mCurrentPosition = index; for (int i = 0; i < childCount; i++) { HorizontalNavigationItemView itemView = (HorizontalNavigationItemView) this.mItemViewContainer.getChildAt(i); itemView.setChecked(i == mCurrentPosition); } if (mCurrentPosition == 0) { scrollTo(0, 0); } else { int left = this.mItemViewContainer.getChildAt(index).getLeft(); smoothScrollTo(left, 0); } } public boolean isChannelSplit() { return isChannelSplit; } //分割线颜色 public void setSplitColor(int resId) { mSplitColor = resId; } //是否有下划线 public void setChannelSplit(boolean channelSplit) { isChannelSplit = channelSplit; } public void addOnHorizontalNavigationSelectListener(OnHorizontalNavigationSelectListener onHorizontalNavigationSelectListener) { this.mOnHorizontalNavigationSelectListener = onHorizontalNavigationSelectListener; } public T getItem(int position) { return mItems == null ? null : mItems.get(position); } /** * 渲染子ItemView * * @param itemView 子View * @param index 子View的索引位置 * @param currentPosition 当前选中位置 */ public abstract void renderingItemView(HorizontalNavigationItemView itemView, int index, int currentPosition); public interface OnHorizontalNavigationSelectListener { void select(int index); }}
源码地址:https://github.com/liuyak/HorizontalNavigationBar
1 0
- Android新闻客户端水平导航条效果
- 类似今日头条网易新闻导航栏水平滑动的效果
- 水平导航条效果 div+css
- Android 头条新闻客户端
- iOS新闻客户端开发教程6-二级栏目导航条
- Android实现腾讯新闻的新闻类别导航效果
- CSS_水平导航条
- Android实现网易新闻客户端效果
- react仿京东客户端首页导航条动画效果
- 水平导航条实现总结
- css 创建水平导航条
- Android高仿网易新闻顶部滑动条效果
- html+ js+ jq+css导航条菜单的制作(水平,竖直,伸缩,带有动画效果等等。。。)
- 模仿android网易新闻客户端左右动画效果
- 单条新闻滚动效果
- Android 导航条效果实现(四) ViewPager+自定义导航条
- 新闻条、广告条滚动效果
- Android 实现界面的滑动导航条指引效果
- android常用的工具类
- iOS修行---TableView进阶1
- fiddler
- ChucK初步(9)
- SparkSession简单介绍
- Android新闻客户端水平导航条效果
- iOS 部分页面的强制横竖屏
- redis 服務器 went away
- C#之MySql登录
- EGOCache缓存框架详细讲解
- 记录对内存泄露(OOM)的处理
- mysql 调优学习笔记(文:2011)
- centos6.5安装JDK1.7
- c++ 准则