当前位置:首页 » 安卓系统 » android循环滚动

android循环滚动

发布时间: 2022-12-21 12:39:47

A. Android实现横纵滚动标题不动框架

用自定义标题栏。
用自定义标题栏,只要把系统自带的标题栏去掉就行。做法:requestWindowFeature(Window.FEATURE_NO_TITLE),自己再写两个布局块(LinearLayout布局)充当顶部和底部的标题栏即可,中间使用ScrollView即可完成。
如果应用需要添加水平滚动条,则可借助于另一个滚动视图HorizontalScrollView来实现。

B. 实现RecyclerView循环滚动

无限循环RecyclerView的完美实现方案
Android RecyclerView打造自动循环效果

C. android如何利用horizon scrollview实现循环滚动

把要滚动的布局放在scrollview里面,

D. Android 自动滚动的RecyclerView

        RecycelrView 自动滚动,顶部item上移动,底部item有动画效果的出来,用于一些条目循环等操作,动漫自动观看

             BRVAH官方使用指南(持续更新) -                 

GitHub - wangtao2855/PictureVideoDemo:  RecyerlView自动滚动功能

E. 求助大神ScrollView循环滚动问题

android 中scrollview可以通过控制滑动速度的属性来解决太慢的问题,示例如下: /** * 快/慢滑动ScrollView */ public class SlowScrollView extends ScrollView { public SlowScrollView(Context context, AttributeSet attrs, int defStyle) ...

F. android怎么viewpager实现循环切换图片

Android中的ViewPager则实现了左右滑动的效果,ViewPager类提供了多界面切换的新效果。利用ViewPager实现图片循环滚动代码如下:

1、首先是布局文件,使用了一个ViewPager控件:

java"><spanstyle="padding:0px;margin:0px;font-size:14px;"><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dip">
<TextView
android:id="@+id/tv_image_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="第一个引导页面"
android:textColor="@android:color/white"
android:textSize="14sp"/>
<LinearLayout
android:id="@+id/ll_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
</RelativeLayout></span>

2、接下来实现一个继承PagerAdapter的MyAdapter类,实现一个PagerAdapter,代码如下:

<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.List;
importandroid.support.v4.view.PagerAdapter;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
{
privateList<ImageView>mImageViewList;
publicViewPagerAdapter(List<ImageView>imageViewList){
super();
this.mImageViewList=imageViewList;
}
/**
*该方法将返回所包含的Item总个数。为了实现一种循环滚动的效果,返回了基本整型的最大值,这样就会创建很多的Item,
*其实这并非是真正的无限循环。
*/
@Override
publicintgetCount(){
returnInteger.MAX_VALUE;
}
/**
*判断出去的view是否等于进来的view如果为true直接复用
*/
@Override
publicbooleanisViewFromObject(Viewarg0,Objectarg1){
returnarg0==arg1;
}
/**
*销毁预加载以外的view对象,会把需要销毁的对象的索引位置传进来,就是position,
*因为mImageViewList只有五条数据,而position将会取到很大的值,
*所以使用取余数的方法来获取每一条数据项。
*/
@Override
publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){
container.removeView(mImageViewList.get(position%mImageViewList.size()));
}
/**
*创建一个view,
*/
@Override
publicObjectinstantiateItem(ViewGroupcontainer,intposition){
container.addView(mImageViewList.get(position%mImageViewList.size()));
returnmImageViewList.get(position%mImageViewList.size());
}
}
</span>

3、最后是主界面部分的代码:

<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.os.SystemClock;
importandroid.support.v4.view.ViewPager;
importandroid.support.v4.view.ViewPager.OnPageChangeListener;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.LinearLayout.LayoutParams;
importandroid.widget.TextView;

{

privateList<ImageView>imageViewList;
privateTextViewtvDescription;
privateLinearLayoutllPoints;
privateString[]imageDescriptions;
=0;
privateViewPagermViewPager;
privatebooleanisLoop=true;
privateHandlerhandler=newHandler(){

@Override
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);

mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1);
}
};

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setView();
initView();
}

publicvoidsetView(){
setContentView(R.layout.activity_splash_viewpager);

//自动切换页面功能
newThread(newRunnable(){

@Override
publicvoidrun(){
while(isLoop){
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
}
}
}).start();
}

publicvoidinitView(){
mViewPager=(ViewPager)findViewById(R.id.viewpager);
tvDescription=(TextView)findViewById(R.id.tv_image_description);
llPoints=(LinearLayout)findViewById(R.id.ll_points);

prepareData();

ViewPagerAdapteradapter=newViewPagerAdapter(imageViewList);
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(this);

tvDescription.setText(imageDescriptions[previousSelectPosition]);
llPoints.getChildAt(previousSelectPosition).setEnabled(true);

/**
*2147483647/2=1073741820-1
*设置ViewPager的当前项为一个比较大的数,以便一开始就可以左右循环滑动
*/
intn=Integer.MAX_VALUE/2%imageViewList.size();
intitemPosition=Integer.MAX_VALUE/2-n;

mViewPager.setCurrentItem(itemPosition);
}

privatevoidprepareData(){
imageViewList=newArrayList<ImageView>();
int[]imageResIDs=getImageResIDs();
imageDescriptions=getImageDescription();

ImageViewiv;
Viewview;
for(inti=0;i<imageResIDs.length;i++){
iv=newImageView(this);
iv.setBackgroundResource(imageResIDs[i]);
imageViewList.add(iv);

//添加点view对象
view=newView(this);
view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
LayoutParamslp=newLayoutParams(5,5);
lp.leftMargin=10;
view.setLayoutParams(lp);
view.setEnabled(false);
llPoints.addView(view);
}
}

privateint[]getImageResIDs(){
returnnewint[]{
R.drawable.bg1,
R.drawable.bg2,
R.drawable.bg3,
R.drawable.pic_01,
R.drawable.pic_02
};
}

privateString[]getImageDescription(){
returnnewString[]{
"第一个引导页面",
"第二个引导页面",
"第三个引导页面",
"第四个引导页面",
"第五个引导页面"
};
}
@Override
(intarg0){

}
@Override
publicvoidonPageScrolled(intarg0,floatarg1,intarg2){

}
@Override
publicvoidonPageSelected(intposition){
//改变图片的描述信息
tvDescription.setText(imageDescriptions[position%imageViewList.size()]);
//切换选中的点,把前一个点置为normal状态
llPoints.getChildAt(previousSelectPosition).setEnabled(false);
//把当前选中的position对应的点置为enabled状态
llPoints.getChildAt(position%imageViewList.size()).setEnabled(true);
previousSelectPosition=position%imageViewList.size();
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
isLoop=false;
}
}
</span>

G. 如何让coordinatorlayout自动往上滚动 android

一个自动滚动,轮播循环视图组件。 使用 (1) 引入公共库 引入Android Auto Scroll ViewPager@Github作为你项目的library(如何拉取代码及添加公共库)。 (2) 调用 仅需简单两步: a. 布局定义 <cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="wrap_content" /> 代替一般的ViewPager定义 b. 启动ViewPager自动滚动 startAutoScroll() 启动自动滚动 stopAutoScroll() 停止自动滚动 3、设置 setInterval(long) 设置自动滚动的间隔时间,单位为毫秒 setDirection(int) 设置自动滚动的方向,默认向右 setCycle(boolean) 是否自动循环轮播,默认为true setScrollDurationFactor(double) 设置ViewPager滑动动画间隔时间的倍率,达到减慢动画或改变动画速度的效果 setStopScrollWhenTouch(boolean) 当手指碰到ViewPager时是否停止自动滚动,默认为true setSlideBorderMode(int) 滑动到第一个或最后一个Item的处理方式,支持没有任何操作、轮播以及传递到父View三种模式 setBorderAnimation(boolean) 设置循环滚动时滑动到从边缘滚动到下一个是否需要动画,默认为true 4、其他 (1) 指示器,圆形或是方形指示器请配合ViewPagerIndicator使用 (2)无限循环,如果希望在最后一张继续播放第一张而不是退回到第一张,请参考AutoScrollViewPagerSingleDemo.java,注意这个特性不能和 ViewPagerIndicator 使用。 要是还不能解决? 你来我们群里说吧 这里是开发者互相学习交流的 有大神 让他们给你解释你的疑问 q un号: 1881 68040

H. Android RecyclerView实现循环列表-点击事件

源码链接

效果图

实现步骤:

1.在build.gradle文件中加入recyclerView库

2.在main.xml中使用recyclerView布局

3.滚动列表中的每一项对应一个对象,他们属于同一类的实例。接着定义实体类,我做的是歌单列表,定义序号,名字和时长

4.设计列表项的样式

4.使用适配器为列表项设置显示的数据

4.1定义适配器的内部类与列表项绑定

4.2适配器继承自recyclerView.Adapter,要重写三个方法,创建列表项视图,复用加载,获取列表项数量,到这一步,循环列表已经可以实现滚动效果了。

5.为列表项添加点击监听事件,使用接口回调

5.1仍然是在适配器中,定义接口

5.2在onBindViewHolder中为列表项设置监听

5.3在MainActivity中使用,实现onclick方法

I. Android TV中实现RecyView循环功能

RecycleView 用法 :

1. [endif]在Gradle中添加

implementation 'com.android.support:recyclerview-v7:26.0.2'

2. [endif]在主布局文件里添加RecycleView

3. [endif]创建item布局文件

在电视开发中,需要添加focusable 与 focusableintouchmode 才可以获得焦点。

4. [endif]创建adapter继承RecyclerView.Adapter

5. [endif] 在adapter中添加缺省方法

1) [endif]On create ViewHolder()方法是将item布局加载到recycleView 的方法

View view = LayoutInflater. from (parent.getContext()).inflate(R.layout. item_2 , parent, false);

创建一个ViewHolder,并添加到ViewHolder里面去,最后返回这个ViewHolder:

ViewHolder holder = new ViewHolder(view);return holder;

2) OnbindViewHolder()是将ViewHolder绑定到RecycleView上面时调用的方法

可在这里做更新View的操作。

3) [endif]GetItemCount 方法为返回数据长度的方法。一般返回值为:

return XXX.size();

4) [endif]在adapter中创建一个viewHolder,继承

 RecyclerView.ViewHolder

在这里创建item布局中的控件对象,在public ViewHolder(View itemView)

方法中初始化:

tvItem2 = itemView.findViewById(R.id. tv_item_2 );

6. 在adapter 中创建一个数据对象用来接收想要传入的数据,在结构体中接收传入的数据例如:

private List mData;

在Activity中的操作

1. [endif]创建recycleView对象,创建layoutManager(布局管理器)对象,创建adapter对象,创建数据对象

2. 实例化recycleView对象,layoutManager对象,adapter对象

RecycleView有几种布局管理器可用,可实现线性,网格,以及瀑布流的界面,以下为线性布局:

mlayoutManager = new LinearLayoutManager(this);

以下为网格布局:

//mlayoutManager = new GridLayoutManager(this,3,GridLayoutManager.HORIZONTAL,false);

3.为recycleview 设置布局管理器:

viewRecy2.setLayoutManager(mlayoutManager);

4.为recycleview设置adapter:

//3 设置数据适配器viewRecy2.setAdapter(myAdapter);

如果要在每一个item中添加事件,采取事件回调的方法,其他自定义View的回调皆类似,以下以添加点击事件为例:

1) 在adapter中添加点击事件的接口,并添加接口方法:

public interface onItemClickListener {    void onItemClick(View view, int position);}

2) [endif]在adapter中创建接口实例

private onItemClickListener onItemClickListener;

3) 在adapter创建对应set方法体来接收Activity传入的对象

public void setOnItemClickListener(onItemClickListener onItemClickListener) {    this.onItemClickListener = onItemClickListener;}

4)在onbindViewholde中判断是否设置了监听器

if (onItemClickListener !=null) {

//为ItemView设置监听器

        holder.tvItem2.setOnClickListener(new View.OnClickListener() {

@Override

            public void onClick(View v) {

int position =holder.getLayoutPosition();

                onItemClickListener.onItemClick(holder.tvItem2, position);

                //onItemClickListener.onItemClick();

            }

});

    }

}

5) 最后在activity中通过adapter对象调用onset方法,实现点击事件

myAdapter.setOnItemClickListener(new MyAdapter.onItemClickListener() {

@Override

            public void onItemClick(View view, int position) {

lastPosition =currentPosition;

                currentPosition = position;

//                Toast.makeText(RecycleActivity_2.this, "click+" + position, Toast.LENGTH_SHORT).show();

                myAdapter.notifyItemChanged(currentPosition);

                myAdapter.notifyItemChanged(lastPosition);

            }

});

Android TV中RecycleView的Item循环实现

(1) 在TV中遥控器的按键取代了手机的滑动,因此我们要监听遥控器的按键,因此在adapter中的item监听setonkeylistener方法。

并获取item所在位置的position,存到tag里面

holder.tvItem2.setTag(position);

 

当在第一个Item中按向上键时,position<0,此时我们调用移动到最后一个,同理,当在最后一个时,移动到第一个。

smoothScrollToPosition(getItemCount() - 1)

holder.tvItem2.setOnKeyListener(new View.OnKeyListener() {

@Override

            public boolean onKey(View v, int keyCode, KeyEvent event) {

int action = event.getAction();

//                Log.e("---", keyCode + "");

                switch (keyCode) {

case KeyEvent.KEYCODE_DPAD_UP:

int positionUp = (int) v.getTag();

                        if (action == KeyEvent.ACTION_DOWN) {

if (positionUp <=0) {

recyclerView.smoothScrollToPosition(getItemCount() -1);

return true;

                            }

}

break;

                    case KeyEvent.KEYCODE_DPAD_DOWN:

int positionDown = (int) v.getTag();

                        if (action == KeyEvent.ACTION_DOWN) {

if (positionDown >= getItemCount() -1) {

recyclerView.smoothScrollToPosition(0);

return true;

                            }

}

break;

                }

return false;

            }

});

 

(2) 然后在activity中封装了一个回滚方法来判断按键是否到达底部,并重新获取焦点

public void scroolChange(RecyclerView recyclerView, boolean toFirst, boolean toLast) {

LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();

    int lastVisibleItem = manager.();

    int firstVisibleItem = manager.();

    int totalItemCount = manager.getItemCount();

    //向下滚动,到底部

    if (lastVisibleItem == (totalItemCount -1) && toLast) {

View view = recyclerView.getChildAt(lastVisibleItem);

        LinearLayoutManager llM = (LinearLayoutManager) recyclerView.getLayoutManager();

        if (view !=null) {

view.requestFocus();

        }else if (llM.findViewByPosition(lastVisibleItem) !=null) {

llM.findViewByPosition(lastVisibleItem).requestFocus();

        }else {

recyclerView.requestFocus();

        }

}

//向上滚动,到顶部

    if (firstVisibleItem ==0 && toFirst) {

View view = recyclerView.getChildAt(firstVisibleItem);

        LinearLayoutManager llM = (LinearLayoutManager) recyclerView.getLayoutManager();

        if (view !=null) {

view.requestFocus();

        }else if (llM.findViewByPosition(firstVisibleItem) !=null) {

llM.findViewByPosition(firstVisibleItem).requestFocus();

        }else {

recyclerView.requestFocus();

        }

}

}

(3) 最后在recycleView 调用addscrolllistener方法,来监听recycleView的滚动状态

由于setonScrollListener有时回产生空指针,因此建议使用add方法

viewRecy2.addOnScrollListener(new RecyclerView.OnScrollListener() {

boolean toLast =false;

            boolean toFirst =false;

            @Override

            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

super.onScrollStateChanged(recyclerView, newState);

                if (newState == recyclerView.SCROLL_STATE_IDLE) {

//                    Log.e("---", "底部");

                    scroolChange(recyclerView, toFirst, toLast);

                }

}

@Override

            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

super.onScrolled(recyclerView, dx, dy);

                if (dy >0) {

toLast =true;

                }else {

toFirst =true;

                }

}

});

Add中包含两个方法,都可以来判断是否到达顶部或底部。至此,实现了Android TV中RecycleView的循环功能。

J. android开发图片(ImageView)要实现循环匀速滚动,速度可调,怎么实现呢,用什么组件好呢

采用画廊视图,GalleryView,自动匀速定时切换的话可以使用Timetask。网上搜一搜,很多案例。望采纳。

热点内容
java构建工具 发布:2025-04-06 16:51:28 浏览:631
sqlserver安装时间 发布:2025-04-06 16:50:36 浏览:72
java工程师面试题 发布:2025-04-06 16:46:11 浏览:897
mysql数据库名字修改 发布:2025-04-06 16:40:37 浏览:342
卸载移动杀毒软件的密码是多少 发布:2025-04-06 16:37:42 浏览:461
libpcaplinux 发布:2025-04-06 16:28:36 浏览:200
h5源码网站 发布:2025-04-06 16:27:00 浏览:132
域电脑时间与服务器不同 发布:2025-04-06 16:25:18 浏览:621
服务器查询ipv4地址 发布:2025-04-06 16:25:10 浏览:257
dll访问被拒绝访问 发布:2025-04-06 16:17:51 浏览:665