仿优酷客户端viewpager定时换图

2024-06-07 10:58

本文主要是介绍仿优酷客户端viewpager定时换图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1写布局文件

<LinearLayout xmlns: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:background="#FFFFFF"
    android:orientation="vertical" >


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="140dip" >


        <android.support.v4.view.ViewPager
            android:id="@+id/vp_test"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />


        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dip"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="中国家庭院校园区域名字体现"
            android:textColor="#123123" />


        <LinearLayout
            android:id="@+id/ll_dots"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="3dip" >


            <View
                android:id="@+id/v_dot0"
                style="@style/dot_style"
                android:background="@drawable/dot_focused" />


            <View
                android:id="@+id/v_dot1"
                style="@style/dot_style" />


            <View
                android:id="@+id/v_dot2"
                style="@style/dot_style" />


            <View
                android:id="@+id/v_dot3"
                style="@style/dot_style" />


            <View
                android:id="@+id/v_dot4"
                style="@style/dot_style" />
        </LinearLayout>
    </RelativeLayout>


</LinearLayout>

2、定义圈的样式

<style name="dot_style">
        <item name="android:layout_width">5dip</item>
        <item name="android:layout_height">5dip</item>
        <item name="android:background">@drawable/dot_normal</item>
        <item name="android:layout_marginLeft">1.5dip</item>
        <item name="android:layout_marginRight">1.5dip</item>
    </style>

3、主要逻辑代码

package com.example.viewpagertest;


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.TextView;


public class MainActivity extends Activity {


private ViewPager mPager;
private List<ImageView> imageViews;
private String[] titles;
private int[] imageResId;
private List<View> dots;
private TextView tv_title;
private int currentitem = 0;
private ScheduledExecutorService service;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
mPager.setCurrentItem(currentitem);
};
};


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupView();
addLisenner();
}


private void addLisenner() {
// TODO Auto-generated method stub
mPager.setOnPageChangeListener(new OnPageChangeListener() {
private int oldposition = 0;


@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
currentitem = arg0;
tv_title.setText(titles[arg0]);
dots.get(oldposition).setBackgroundResource(
R.drawable.dot_normal);
dots.get(arg0).setBackgroundResource(R.drawable.dot_focused);
oldposition = currentitem;


}


@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub


}


@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub


}
});


}


private void setupView() {
// TODO Auto-generated method stub
mPager = (ViewPager) findViewById(R.id.vp_test);
tv_title = (TextView) findViewById(R.id.tv_title);


imageResId = new int[] { R.drawable.a, R.drawable.b, R.drawable.c,
R.drawable.d, R.drawable.e };


titles = new String[imageResId.length];
titles[0] = "巩俐不低俗,我就不能低俗";
titles[1] = "扑树又回来啦!再唱经典老歌引万人大合唱";
titles[2] = "揭秘北京电影如何升级";
titles[3] = "乐视网TV版大派送";
titles[4] = "热血屌丝的反杀";


imageViews = new ArrayList<ImageView>();


for (int i = 0; i < imageResId.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(imageResId[i]);
imageView.setScaleType(ScaleType.CENTER_CROP);
imageViews.add(imageView);
}
tv_title.setText(titles[0]);


dots = new ArrayList<View>();
dots.add(findViewById(R.id.v_dot0));
dots.add(findViewById(R.id.v_dot1));
dots.add(findViewById(R.id.v_dot2));
dots.add(findViewById(R.id.v_dot3));
dots.add(findViewById(R.id.v_dot4));


mPager.setAdapter(new MyAdapter());


}


private class MyAdapter extends PagerAdapter {


@Override
public int getCount() {
// TODO Auto-generated method stub
return imageResId.length;
}


@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
((ViewPager) container).addView(imageViews.get(position));
return imageViews.get(position);
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
// super.destroyItem(container, position, object);//这个一定要去掉
((ViewPager) container).removeView((View) object);
}


@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
}


@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(new ScrollTask(), 1, 2, TimeUnit.SECONDS);
}


private class ScrollTask implements Runnable {


@Override
public void run() {
// TODO Auto-generated method stub
synchronized (mPager) {
System.out.println("currentItem: " + currentitem);
currentitem = (currentitem + 1) % imageViews.size();// 加1代表下一个
// 第二张图
handler.obtainMessage().sendToTarget();
}
}
}


@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
service.shutdown();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


}

这篇关于仿优酷客户端viewpager定时换图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038987

相关文章

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J