如何让TextViewps怎么让字跟着路径走RecyclerView滚动

先看效果(由于本人不会制作动图,只能给静态图)
RecyclerView随着滑动toolsbar颜色开始变化
布局文件:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&&
&!-- title标题栏--&
&android.support.v7.widget.Toolbar
android:id=&@+id/toolbar&
android:layout_width=&match_parent&
android:layout_height=&?android:actionBarSize&&
&ImageView
android:id=&@+id/iv_back&
android:layout_width=&20dp&
android:layout_height=&20dp&
android:layout_marginLeft=&20dp&
android:gravity=&center_vertical&
android:src=&@drawable/icon_back&
android:textColor=&#fff& /&
android:id=&@+id/tv_name&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_marginRight=&40dp&
android:gravity=&center&
android:textColor=&@color/white&
android:textSize=&17sp& /&
&/android.support.v7.widget.Toolbar&
&android.support.v7.widget.RecyclerView
android:id=&@+id/rv_zhangjie&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:layout_alignParentStart=&true&
android:layout_below=&@+id/title& /&
&/LinearLayout&
Activity的关键代码
mRecylerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//滑动的距离
mDistanceY += dy;
//toolbar的高度
int toolbarHeight = mToolbar.getBottom();
//当滑动的距离 &= toolbar高度的时候,改变Toolbar背景色的透明度,达到渐变的效果
if (mDistanceY &= toolbarHeight) {
float scale = (float) mDistanceY / toolbarHeight;
float alpha = scale * 255;
mToolbar.setBackgroundColor(Color.argb((int) alpha, 128, 0, 0));
//上述虽然判断了滑动距离与toolbar高度相等的情况,但是实际测试时发现,标题栏的背景色
//很少能达到完全不透明的情况,所以这里又判断了滑动距离大于toolbar高度的情况,
//将标题栏的颜色设置为完全不透明状态
mToolbar.setBackgroundResource(R.color.colorPrimary);
这就轻松实现了标题栏渐变
本文已收录于以下专栏:
相关文章推荐
参考自:http://blog.csdn.net/smart_yc/article/details/
核心代码://headview为头布局;llSearch为搜索栏
Recyclerview实现标题栏渐变和上拉下拉刷新。如果需要listview,等其他控件,需实现onScrollListener,在onscroll中嵌入渐变代码。
一.思路:监听ScrollView的滑动事件 不断的修改Toolbar的透明度
1.ScrollView 6.0以前没有scrollView.setOnScrollChangeL...
本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。
源码已经上传到我的Github上了,希望小伙伴们Follow,star,fork
(https://githu...
上次自己做了个简单的RecyclerView+SwipeRefrashLayou滑动demo,做完后又给加了个隐藏的效果。
需要学习RecyclerView的请查看我上篇博客http://www.j...
不管是scrollView还是recyclerView都需要设置滑动监听scroll.setScrollViewListener(new ScrollView.OnScrollViewListener...
让标题栏透明度随着recycleview的滑动而渐变
各位早上好,话不多说,先上效果图:注意顶部:首页TextView的变化(显示和隐藏)!首先分析下:UI状态,其是由RecyclerView添加头部组成+RecyclerView
头部添加和Recyc...
最近公司项目中有一个需求是首页RecyclerView滑动时改逐渐改变透明度,因为之前做过scrollview滑动改变标题栏的功能,本以为很简单可没想到在做的过程中遇到了坑,就是RecyclerVie...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)使用RecyclerView实现多样的View - 简书
使用RecyclerView实现多样的View
根据()简单的学习了使用RecyclerView 和 CardView 来创建列表与卡片后,就想怎么让一个RecyclerView 根据数据呈现不同类型的CardView.
RecyclerView和Cardview 是Support Library的一部分。所以需要在app/build.gradle中添加以下依赖,才能立即使用
compile 'com.android.support:cardview-v7:24.0.0-alpha1'
compile 'com.android.support:recyclerview-v7:24.0.0-alpha1'
创建cardview 和RecyclerView
cardviewone.xml
&?xml version="1.0" encoding="utf-8"?&
&android.support.v7.widget.CardView
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="160dp"
app:cardElevation="8dp"
android:layout_marginTop="4dp"
android:layout_margin="16dp"
app:cardBackgroundColor="@color/title_cardview"&
&RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"&
&TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:id="@+id/text"
android:textColor="@color/white"
android:layout_margin="16dp"
android:text="日期"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/date"
android:text="@string/date"
android:textSize="16sp"
android:textColor="@color/white"
android:layout_marginLeft="0dp"
android:layout_alignTop="@+id/text"
android:layout_toEndOf="@+id/text" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="32sp"
android:text="@string/task"
android:layout_below="@+id/text"
android:layout_alignStart="@+id/text"
android:id="@+id/textView" /&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加任务"
android:textColor="@color/white"
style="?attr/borderlessButtonStyle"
android:id="@+id/button"
android:layout_above="@+id/textView"
android:layout_alignParentEnd="true"
android:layout_marginEnd="25dp" /&
&/RelativeLayout&
&/android.support.v7.widget.CardView&
cardviewtwo.xml
&?xml version="1.0" encoding="utf-8"?&
&android.support.v7.widget.CardView
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="160dp"
app:cardElevation="8dp"
android:layout_marginTop="4dp"
android:layout_margin="16dp"&
&RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"&
&TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:id="@+id/text"
android:layout_margin="16dp"
android:text="我是天气预报哦"/&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/score"
android:text="32℃"
android:textSize="72sp"
android:layout_marginLeft="0dp"
android:layout_below="@+id/text"
android:layout_alignStart="@+id/text" /&
&/RelativeLayout&
&/android.support.v7.widget.CardView&
main_activity.xml
&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
xmlns:app="/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"&
&android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#ffffff"
app:elevation="1dp"
app:theme="@style/AppTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="我是APP"
android:textSize="@dimen/abc_text_size_title_material_toolbar"&
&/TextView&
&/android.support.v7.widget.Toolbar&
&android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
&/android.support.v7.widget.RecyclerView&
&/LinearLayout&
在MainActivity中设置RecicylerView
RecyclerView recyclerView = (RecyclerView)
findViewById(R.id.recyclerview);RecyclerView.LayoutManager layoutManager = new
LinearLayoutManager(this);recyclerView.setLayoutManager(layoutManager);MyRecyclerAdapter
myRecyclerAdapter =new MyRecyclerAdapter(itemList,this);recyclerView.setAdapter(myRecyclerAdapter);
itemList是一个 ArrayList&Data&,Data是一个自定义的类,等会我们会根据这里面的状态值来确定我们哪一个CardView
自定义一个RecyclerView.Adapter想要让它显示各种各样的View的话,主要靠的是重载getItemViewType函数
public int getItemViewType(int position) {
return ItemList.get(position).getType();
为每一种View设置一个ViewHolder类
public class OneViewHolder extends CustomViewHolder {
private TextV private TextV
public OneViewHolder(View itemView) {
super(itemView); date = (TextView)itemView.findViewById(R.id.date);
task = (TextView)itemView.findViewById(R.id.textView);
add = (Button)itemView.findViewById(R.id.button);
public class TwoViewHolder extends CustomViewHolder {
private TextV
private TextV
public TwoViewHolder(View itemView) {
super(itemView);
date = (TextView)itemView.findViewById(R.id.text);
temp = (TextView)itemView.findViewById(R.id.score);
重载onCreateViewHolder函数
private static final int TASK = 1;
private static final int WEATHER =2;
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(TASK == viewType) {
View v = LayoutInflater.from(mcontext).inflate(R.layout.cardview_one,parent,false);
return new OneViewHolder(v);
} else if(WEATHER == viewType) {
View v = LayoutInflater.from(mcontext).inflate(R.layout.cardview_two,parent,false);
return new TwoViewHolder(v);
期中 viewType 就是之前getItemViewType 返回的拉
最后一步:onBindViewHolder()绑定数据到正确的Item视图上。
public void onBindViewHolder(CustomViewHolder holder, int position) {
int type = ItemList.get(position).
switch (type){
case TASK:
OneViewHolder oneViewHolder = (OneViewHolder)
oneViewHolder.date.setText(ItemList.get(position).getData1());
oneViewHolder.task.setText(ItemList.get(position).getData2());
case WEATHER:
TwoViewHolder twoViewHolder = (TwoViewHolder)
twoViewHolder.date.setText(ItemList.get(position).getData1());
twoViewHolder.temp.setText(ItemList.get(position).getData2());
我自己定义的Data.Class
public class Data{
private String data1;
private String data2;
public Data(String data1, String data2, int type) {
this.data1 = data1;
this.data2 = data2;
this.type =
public String getData1() {
return data1;
public String getData2() {
return data2;
public int getType() {
效果图:虽然丑了一点,但还可以啦
Paste_Image.png
内容大概都是原创问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
想要实现下面这张图里面的「Google+上的最新热点信息」的样子,也就是RecyclerView中间分隔的部分插入了文字,而且可以跟RecyclerView一起滚动。
我试过在RecyclerView前面加TextView(下图的日),但是不行,TextView并不能随着卡片滚动,而且我这里只是在RecyclerView的开头加了TextView:
请问应该怎么实现第一张图里面的TextView随着卡片滚动的效果?那个TextView也是一个RecyclerView吗?谢谢
附第二张图的XML:
&?xml version="1.0" encoding="utf-8"?&
&android.support.v4.widget.SwipeRefreshLayout xmlns:android="/apk/res/android"
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0F0F0"
android:orientation="vertical"&
&LinearLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"&
android:id="@+id/date_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10.0dip"
android:text="日"
android:textSize="15.0sp" /&
&android.support.v7.widget.RecyclerView
android:id="@+id/cards_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical" /&
&/LinearLayout&
&/android.support.v4.widget.SwipeRefreshLayout&
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
类似ListView,有两种viewType.
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
有一种实现方法:recyclerView的Adapter有一个getItemViewType()方法 可以根据需求跟换item布局实现方法可以参考:
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:5903人阅读
开发备忘(15)
项目中需要横向滚动效果,按照以前的思路,我会写一个ScrollView,里边加一个LinearLayout,在代码中动态加入控件,然后动态删除或者改变颜色,现在android有了新控件RecyclerView,可以方便的实现这样的功能,具体使用方法请参考这篇文章:
主要问题在于,我点击一个item,改变颜色,点击其他项,改变颜色,上一次点击的变回原来的颜色,刚开始实现的方法是在控件上直接修改,发现滑动的时候,颜色会乱掉,所以在adapter里边加入一个list进行标记,根据标记改变控件颜色
相应的adapter
public class AddDeviceAdapter extends RecyclerView.Adapter&AddDeviceAdapter.ViewHolder& /*implements View.OnClickListener*/{
private OnItemClickListener mOnItemClickListener = null;
private LayoutInflater mI
private List&AddDevice& mD
private AddDevice addD
private List&Boolean& isC
public AddDeviceAdapter(Context context, List&AddDevice& datas) {
mInflater = LayoutInflater.from(context);
isClicks = new ArrayList&&();
for(int i = 0;i&mDatas.size();i++){
isClicks.add(false);
public void setDatas(List&AddDevice& datas) {
L.e("AddDeviceAdapter's mDatas===" + new Gson().toJson(mDatas));
public void setOnItemClickLitener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickL
public int getItemCount() {
return mDatas.size();
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = mInflater.inflate(R.layout.item_add_device, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(view);
viewHolder.viewSpace = view.findViewById(R.id.viewSpace);
viewHolder.ivAddDevice = (ImageView) view.findViewById(R.id.ivAddDevice);
viewHolder.tvAddDevice = (TextView) view.findViewById(R.id.tvAddDevice);
return viewH
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
addDevice = mDatas.get(i);
viewHolder.ivAddDevice.setImageResource(addDevice.getResId());
viewHolder.tvAddDevice.setText(addDevice.getItemText());
viewHolder.itemView.setTag(viewHolder.tvAddDevice);
if(isClicks.get(i)){
viewHolder.tvAddDevice.setTextColor(Color.parseColor("#00a0e9"));
viewHolder.tvAddDevice.setTextColor(Color.parseColor("#ffffff"));
if (mOnItemClickListener != null) {
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
for(int i = 0; i &isClicks.size();i++){
isClicks.set(i,false);
isClicks.set(i,true);
notifyDataSetChanged();
mOnItemClickListener.onItemClick(viewHolder.itemView,viewHolder.tvAddDevice, i);
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View arg0) {
super(arg0);
View viewS
ImageView ivAddD
TextView tvAddD
public interface OnItemClickListener {
void onItemClick(View view, TextView textView,int position);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:103051次
积分:1823
积分:1823
排名:千里之外
原创:85篇
评论:32条
(1)(1)(1)(7)(1)(3)(5)(2)(5)(3)(6)(1)(5)(1)(14)(9)(9)(11)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'recyclerview里的内容为何全部挤在左边了?
? - 知乎7被浏览2704分享邀请回答0添加评论分享收藏感谢收起92 条评论分享收藏感谢收起

我要回帖

更多关于 ae怎么让遮罩跟着运动 的文章

 

随机推荐