Android最简单的轮播图实现
来源:互联网 发布:怎么装ubuntu双系统 编辑:程序博客网 时间:2024/06/07 22:00
最简单的轮播图
参考http://www.cnblogs.com/xurui1995/p/5759371.html博文
xml布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:context="com.example.playpicture.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="180dp"> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:layout_alignParentBottom="true" android:background="#66000000" android:orientation="horizontal"> <LinearLayout android:id="@+id/point_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:orientation="horizontal"> </LinearLayout> </LinearLayout> </RelativeLayout></RelativeLayout>
在Drawable下新建下面3个Drawable resource file
bg_shape
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <corners android:radius="5dp"/> <solid android:color="#FFFFFF"/></shape>
bg_shape2
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <corners android:radius="5dp"/> <solid android:color="#808080"/></shape>
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/bg_shape" android:state_enabled="true" /> <item android:drawable="@drawable/bg_shape2" android:state_enabled="false" /></selector>
package com.example.playpicture;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import java.util.ArrayList;/** * 在Activity中使用页面改变监听实现可以手动滑动的轮播图 */public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{ private ViewPager vp; private int[] imas; private LinearLayout ll; private ArrayList<ImageView> imaList; private Boolean flag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化布局 initViews(); //数据 initData(); //适配器 initAdapter(); flag=true; //实现自动轮播 new Thread(new Runnable() { @Override public void run() { while (flag) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } //这里加上MainActivity.this获取当前context环境 MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { vp.setCurrentItem(vp.getCurrentItem() + 1); } }); } } }).start(); } private void initAdapter() { ll.getChildAt(0).setEnabled(true); vp.setAdapter(new MyAdapter()); vp.setCurrentItem(Integer.MAX_VALUE/2+2);//这里以一个%5为0的数开始,这样打开默认会在第0个item显示 } @Override protected void onDestroy() { super.onDestroy(); flag=false; } private void initData() { } private void initViews() { vp = (ViewPager) findViewById(R.id.vp); vp.setOnPageChangeListener(this); ll= (LinearLayout) findViewById(R.id.point_container); //图片数组,将要实现轮播的图片放这数组里 imas = new int[]{R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,}; ImageView iv; imaList = new ArrayList<ImageView>(); View pointview; for (int i = 0; i < imas.length; i++) { iv = new ImageView(this); iv.setImageResource(imas[i]); imaList.add(iv); //加小白点 pointview =new View(this); pointview.setEnabled(false); pointview.setBackgroundResource(R.drawable.selector); LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(15,15); //params.gravity= Gravity.CENTER; if(i!=0) params.leftMargin=10; ll.addView(pointview, params ); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { for(int i=0;i<ll.getChildCount();i++){ ll.getChildAt(i).setEnabled(false); } ll.getChildAt(position%5).setEnabled(true);//设置小白点 } @Override public void onPageScrollStateChanged(int state) { } class MyAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, int position) { int newposition =position%5;//得到新位置 ImageView imageView=imaList.get(newposition); container.addView(imageView); return imageView;//把View对象返回给框架,必须重写 } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override //判断复用 public boolean isViewFromObject(View view, Object object) { return view==object; } }}
这就是最简单的轮播图实现(经测试)
1 0
- Android最简单的轮播图实现
- android 最简单的九宫格实现
- Android 最简单的导航栏实现
- Android之最简单的Banner实现
- Android最简单的方式实现MVP
- android最简单的录像功能的实现
- 最简单的方式实现一个Android的MVP
- 使用libevent实现最简单的android http-server
- 使用libevent实现最简单的android http-server
- 最简单的Splash Screen在Android中的实现
- 认识android(实现最简单的应用say hello)
- Android实现最简单的触屏实例
- Android倒计时+警报[最简单的实现方式]
- Android之使用ViewPager实现图片展示(最简单的)
- Android 基础-最简单的listView实现 ArrayAdapter
- android 最简单的方式实现旋转进度条
- Android圆角图片最简单的实现方法详解
- 手把手教会基于Android实现最简单的计算器操作
- 观察者模式
- My goal
- Eclipse导入的java文件乱码问题
- Unity3D 获取一个游戏对象的尺寸
- 数列排序
- Android最简单的轮播图实现
- 一个有关callout的错误
- 简单的动态网页
- NYOJ-32
- Linux进程控制demo
- React-Native延迟加载数据,避免更新数据时造成画面卡顿的方案
- 免费好用的终端程序 ssh shell
- "超哥与代码"之I/O流基础(概念)balabala
- 未来的八种人将会被淘汰