ViewPager
来源:互联网 发布:杭州数据资源管理局 编辑:程序博客网 时间:2024/06/02 14:19
ViewPager图片自动(手动)滑动
主布局文件:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="40dip" android:background="@drawable/title_bk" > <!-- 返回按钮图片 --> <ImageButton android:id="@+id/btn_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_back_selector" android:src="@drawable/btn_back" /> <!-- 一条横的黑色线 --> <View android:id="@+id/line0" android:layout_width="1dp" android:layout_height="fill_parent" android:layout_toRightOf="@id/btn_back" android:background="#aa11264f" /> <!-- 一条横的灰色线 --> <View android:layout_width="1px" android:layout_height="fill_parent" android:layout_toRightOf="@id/line0" android:background="#009ad6" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="优酷客户端" android:textColor="#ffffff" android:textSize="20sp" /> </RelativeLayout> <FrameLayout android:layout_width="fill_parent" android:layout_height="140dp" > <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="35dp" android:layout_gravity="bottom" android:background="#33000000" android:gravity="center" android:orientation="vertical" > <!-- 标题 --> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="中国家庭院校园区域名字体现" android:textColor="#ffffff" /> <!-- 五个点 --> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:gravity="center" > <!-- 此处可以去掉,只是为了演示style的使用 style="@style/dot_style" -被引用 <item name="android:layout_width">5dp</item> <item name="android:layout_height">5dp</item> <item name="android:background">@drawable/dot_normal</item> <item name="android:layout_marginLeft">1.5dp</item> <item name="android:layout_marginRight">1.5dp</item> <View android:id="@+id/v_dot0" style="@style/dot_style"/>-引用 相 当于 <View android:id="@+id/v_dot0" android:layout_width="5dp" android:layout_height="5dp" android:layout_marginLeft="1.5dp" android:layout_marginRight="1.5dp" android:background="@drawable/dot_normal"/> --> <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> </LinearLayout> </FrameLayout></LinearLayout>
values/styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme.Light"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> <style name="dot_style"> <item name="android:layout_width">5dp</item> <item name="android:layout_height">5dp</item> <item name="android:background">@drawable/dot_normal</item> <item name="android:layout_marginLeft">1.5dp</item> <item name="android:layout_marginRight">1.5dp</item> </style></resources>
MainActivity.java
package com.example.myviewpage;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.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import android.widget.TextView;/** * 仿优酷Android客户端图片左右滑到 * */public class MainActivity extends Activity {private ViewPager viewPager; //android-support-v4中的滑动组件private List<ImageView> imageViews; //滑动的图片集合private String[] titles;// 图片标题private int[] imageResId;//图片IDprivate List<View> dots; //图片标题正文的那些点private TextView tv_title;private int currentItem=0; //当前图片的索引号private ScheduledExecutorService scheduledExecutorService;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); 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] = "八神庵,草稚京,阿k"; titles[2] = "草稚京"; titles[3] = "97拳王开始封面"; 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);} // 五个点加入到集合 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)); tv_title=(TextView) findViewById(R.id.tv_title); tv_title.setText(titles[0]); // 设置标题文字 viewPager=(ViewPager) findViewById(R.id.vp); viewPager.setAdapter(new MyAdapter()); // 设置填充viewPager页面的适配器 // 设置一个监听器,当ViewPager中的页面改变时调用 viewPager.setOnPageChangeListener(new MyPageChangeListener()); }// 开始@Overrideprotected void onStart() { scheduledExecutorService= Executors.newSingleThreadScheduledExecutor(); // 当Activity显示出来后,每两秒钟切换一次图片显示 //scheduledExecutorService.scheduleAtFixedRate(command, initialDelay, period, unit//单位) scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2, TimeUnit.SECONDS); super.onStart();}// 暂停@Overrideprotected void onStop() {//当Activity不可见的时候停止切换scheduledExecutorService.shutdown();super.onStop();} ///////////////////////////用Handler切换图片/////////////////////////////////////////////////** * 换行切换任务-----子线程 * */private class ScrollTask implements Runnable{public void run() { synchronized (viewPager) { System.out.println("currentItem: " + currentItem); currentItem = (currentItem + 1) % imageViews.size(); handler.obtainMessage().sendToTarget(); // 通过Handler切换图片 } } } // 切换当前显示的图片 @SuppressLint("HandlerLeak")private Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {//接收子线程的消息,处理viewPager.setCurrentItem(currentItem);// 切换当前显示的图片}; }; ////////////////////////////////////////////////////////////////////////////** * 当ViewPager中页面的状态发生改变时调用 * */private class MyPageChangeListener implements OnPageChangeListener{private int oldPosition=0;/** * 页面滚动状态发生改变的时候触发 */@Overridepublic void onPageScrollStateChanged(int arg0) {}/** * 页面选中的时候触发 */// ---注意别用错方法---@Overridepublic void onPageSelected(int position) {currentItem=position;tv_title.setText(titles[position]);dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);dots.get(position).setBackgroundResource(R.drawable.dot_focused);oldPosition=position;}/** * 页面滚动的时候触发 * */@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}}/** * 填充ViewPager页面的适配器 * */private class MyAdapter extends PagerAdapter{@Overridepublic int getCount() {return imageResId.length;}/** * 从View集合中获取对应索引的元素,并添加到ViewPager中 */@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager)arg0).addView(imageViews.get(arg1));return imageViews.get(arg1);}//销毁选项/** * 从ViewPager中删除集合中对应索引的View对象 */@Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager)arg0).removeView((View)arg2);}/** * 是否显示的ViewPager页面与instantiateItem返回的对象进行关联 */@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0==arg1;}}}
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <!--获取焦点 --> <item android:state_focused="true" android:drawable="@drawable/btn_top_pressed" ></item> <!--按下 --> <item android:state_pressed="true" android:drawable="@drawable/btn_top_pressed" ></item> <!-- 选择时 --> <item android:state_selected="true" android:drawable="@drawable/btn_top_pressed" ></item> <!-- 默认 --> <item android:drawable="@drawable/title_bk"/> </selector>
<?xml version="1.0" encoding="utf-8"?><!-- 形状 -矩形 渐变 -角度 -开始颜色 -结束颜色 --><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="270" android:endColor="#009ad6" android:startColor="#11264f" /> </shape>
dot_focused.xml
<?xml version="1.0" encoding="utf-8"?><!-- 形状:椭圆立体 颜色 圆 半径 --><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#aaFFFFFF"/> <corners android:radius="5dp"/></shape>
dot_normal.xml
<?xml version="1.0" encoding="utf-8"?><!-- 形状:椭圆 立体 颜色 圆 半径 --><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#33000000"/> <corners android:radius="5dip"/></shape>
title_bk.xml
<?xml version="1.0" encoding="utf-8"?><!-- 形状 -矩形 渐变 -角度 -开始颜色 -结束颜色 --><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="270" android:startColor="#11264f" android:endColor="#009ad6" /></shape>
2 0
- Viewpager
- ViewPager
- ViewPager
- ViewPager
- ViewPager
- ViewPager
- viewpager
- ViewPager
- ViewPager
- ViewPager
- Viewpager
- viewpager
- ViewPager
- ViewPager
- ViewPager
- viewpager
- ViewPager
- ViewPager
- php加密解密函数authcode的用法详细解析
- jQuery和CSS3炫酷全屏滑动菜单特效
- 利用POI创建Excel文件
- 删繁就简之Ajax代码封装
- android如何把apk的工程代码放到源码目录下编译
- ViewPager
- 黑马程序员--JAVA基础--测试博客
- spring aop(五)--ProxyFactoryBean创建代理的实现
- Android 源代码中增加新apk
- 回忆一下带学生工作室时的一些趣事
- 螺旋方阵(20)
- spring aop(六)--代理调用机制
- 循环队列和链表队列代码
- 入门学习duilib的要点