看开源框架:https://github.com/tianshaojie/AndroidFine,里面有如下效果,特记录学习下,以后项目中用也好能够立刻想起来。
 
如上面所示,是常见项目中的图片轮训和展示效果,技术主要涉及到viewpager+photoview,那下面主要讲解如何在android App中如何实现该效果:
  1. 导入photoview相关代码:
    
    2.   头部轮训和展示的代码:
    
第1个页面的实现:
首先看布局:
activity_photoview.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="160dp"
android:background="@color/white" >
<com.soyoungboy.widget.loopviewpager.AutoLoopViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<com.soyoungboy.widget.viewpagerindicator.CirclePageIndicator
android:id="@+id/indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="5dp"
android:padding="5dp" />
</RelativeLayout>
PhotoViewActivity.java文件
  1. public class PhotoViewActivity extends BaseFragmentActivity {
    private com.soyoungboy.widget.loopviewpager.AutoLoopViewPager pager;
    private int[] imageViewIds;
    private com.soyoungboy.widget.viewpagerindicator.CirclePageIndicator indicator;
    private List<String> imageList = new ArrayList<String>(Arrays.asList(
    "http://pic.nipic.com/2008-07-11/20087119630716_2.jpg",
    "http://pic.nipic.com/2008-07-11/20087119630716_2.jpg",
    "http://pic.nipic.com/2008-07-11/20087119630716_2.jpg"));
    @Override
    protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    setContentView(R.layout.activity_photoview);
    initView();
    }
    @Override
    protected void initView() {
    pager = (com.soyoungboy.widget.loopviewpager.AutoLoopViewPager) findViewById(R.id.pager);
    indicator = (com.soyoungboy.widget.viewpagerindicator.CirclePageIndicator) findViewById(R.id.indicator);
    //设置要显示的图片内容
    imageViewIds = new int[] { R.drawable.house_background, R.drawable.house_background_1, R.drawable.house_background_2};
    //适配器
    GalleryPagerAdapter galleryAdapter = new GalleryPagerAdapter();
    pager.setAdapter(galleryAdapter);
    indicator.setViewPager(pager);
    //控制距离左边,上边,右边,下边的px距离
    indicator.setPadding(5, 5, 10, 5);
    }
    @Override
    protected void initTitleView() {
    }
    @Override
    protected void click(View view) {
    }
    //轮播图适配器
    public class GalleryPagerAdapter extends PagerAdapter {
    @Override
    public int getCount() {
    return imageViewIds.length;
    }
    @Override
    public boolean isViewFromObject(View view, Object object) {
    return view == object;
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
    ImageView item = new ImageView(PhotoViewActivity.this);
    //Imageview上面显示图片
    item.setImageResource(imageViewIds[position]);
    ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(-1, -1);
    item.setLayoutParams(params);
    item.setScaleType(ImageView.ScaleType.FIT_XY);
    container.addView(item);
    final int pos = position;
    //Imageview单击事件处理
    item.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    //进入ImageGalleryActivity代码里面去
    Intent intent = new Intent(PhotoViewActivity.this, ImageGalleryActivity.class);
    intent.putStringArrayListExtra("images", (ArrayList<String>) imageList);
    intent.putExtra("position", pos);
    startActivity(intent);
    }
    });
    return item;
    }
    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
    collection.removeView((View) view);
    }
    }
    @Override
    protected void onResume() {
    super.onResume();
    //开始自动左右切换图片
    pager.startAutoScroll();
    }
    @Override
    protected void onPause() {
    super.onPause();
    //结束自动左右切换图片
    pager.stopAutoScroll();
    }
    }


第2张图功能实现:
首先布局文件activity_touch_gallery.xml

  1. <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fitsSystemWindows="true"
    android:background="@color/black"> <android.support.v4.view.ViewPager
    android:id="@+id/viewer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/layoutHeader" /> </RelativeLayout>


ImageGalleryActivity .java
public class ImageGalleryActivity extends BaseFragmentActivity {

    private int position;
private List<String> imgUrls; //图片列表
private TextView headTitle;
private Button headBackBtn; private ViewPager mViewPager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_touch_gallery); Intent intent = getIntent();
position = intent.getIntExtra("position", 0);
//获取图片的url List集合
imgUrls = intent.getStringArrayListExtra("images");
if(imgUrls == null) {
imgUrls = new ArrayList<>();
}
initGalleryViewPager();
} @Override
protected void onDestroy() {
super.onDestroy();
}
private void initGalleryViewPager() {
PhotoViewAdapter pagerAdapter = new PhotoViewAdapter(this, imgUrls);
pagerAdapter.setOnItemChangeListener(new PhotoViewAdapter.OnItemChangeListener() {
int len = imgUrls.size();
@Override
public void onItemChange(int currentPosition) {
//滑动到总图片数目的几分之几
// headTitle.setText((currentPosition+1) + "/" + len); }
});
mViewPager = (ViewPager)findViewById(R.id.viewer);
mViewPager.setOffscreenPageLimit(3);
mViewPager.setAdapter(pagerAdapter);
mViewPager.setCurrentItem(position);
} @Override
protected void initView() { } @Override
protected void initTitleView() { } @Override
protected void click(View view) { } }
PhotoViewAdapter代码可参考:
 
loopviewpager包下代码可参考:
https://github.com/tianshaojie/AndroidFine/tree/master/app/src/main/java/com/yuzhi/fine/ui/loopviewpager

android项目实战 --ListView 头部ViewPager广告轮询图效果的更多相关文章

  1. Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View

    最近开发中需要做一个类似京东首页那样的广告轮播效果,于是采用ViewPager自己自定义了一个轮播图效果的View. 主要原理就是利用定时任务器定时切换ViewPager的页面. 效果图如下: 主页面 ...

  2. Android项目实战(四十七):轮播图效果Viewpager

    简易.常用的轮播图效果ViewPager ,老技术了,记一笔留着以后ctrl C + ctrl V    需求如下: 不定张个数的ImagView轮播,右下角显示轮播点图标,每隔固定时间切换下一张,最 ...

  3. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...

  4. Android项目实战(二十九):酒店预定日期选择

    先看需求效果图: 几个需求点: 1.显示当月以及下个月的日历 (可自行拓展更多月份) 2.首次点击选择"开始日期",再次点击选择"结束日期" (1).如果&qu ...

  5. Android项目实战--手机卫士开发系列教程

    <ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件  保存到相册 2 分钟前 上传   Android项目实战--手机卫士01- ...

  6. Android项目实战(四十九):Andoird 7.0+相机适配

    解决方案类似: Android项目实战(四十):Andoird 7.0+ 安装APK适配 解决方法: 一.在AndroidManifest.xml 文件中添加 四大组件之一的 <provider ...

  7. Android项目实战(三十二):圆角对话框Dialog

    前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话框的"确定"按钮 难点:1.对话框边框圆角 ...

  8. (转载)Android项目实战(三十二):圆角对话框Dialog

    Android项目实战(三十二):圆角对话框Dialog   前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...

  9. (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结

    Android项目实战(二十七):数据交互(信息编辑)填写总结   前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: ...

随机推荐

  1. Andy的生活

    Andy是一个善良的男孩,希望优雅地生活. 现实是残酷的. 现实是,Andy像狗一样活着. Andy犯的错是,错误地认为狗一样的生活将在高考结束的那一刻结束. 大学四年时间根本没有静下心来学习,却在生 ...

  2. 巧用ajax请求服务器加载数据列表时提示loading

    我们利用weui.js中的weui.loading为效果,ajax的beforeSend与complete方法,做一个加载数据时会有几秒的 loading... 要在页面需要加载的JS文件: < ...

  3. Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用

    Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用 hydra可以破解: http://www.thc.org/thc-hydra,可支持AFP, Cisco AAA, Cisco a ...

  4. 图片,音频资源预加载和文档dom加载

    在项目中遇到一个问题,ajax请求音频资源,然后动态的插入到文档中,其中.原生的音频外观实在太丑了,而且每个浏览器的样式都不一样,采取了一个audio插件. 就遇到一个问题,请求后的直接调用插件的话, ...

  5. 第13章 MySQL高级编程

    1.事务:一个或一系列的查询: 2.使用事务安全的表格类型(通过InnoDB): ①关闭自动提交: set autocommit=0; //若自动提交被打开,须使用如下语句开始一个事务: //  st ...

  6. Fatal error: Call to undefined function oci_connect()

    http://stackoverflow.com/questions/22478387/call-to-undefined-function-oci-connect Whenever you conn ...

  7. C# SessionHelper

    using System.Web; using System.Web.SessionState; namespace Utils { /// <summary> /// Session帮助 ...

  8. CoreJavaE10V1P3.9 第3章 Java的基本编程结构-3.9 大数值(Big Numbers)

    如果基本的整型与浮点型不能满足需求,可以使用java.Math包提供的 BigInteger 和 BigDecimal 两个类,这两个类可以存储任意长度的数, BigInteger 实现的任意精度整数 ...

  9. CodeForces 710E Generate a String

    $SPFA$,优化,$dp$. 写了一个裸的$SPFA$,然后加了一点优化就过了,不过要$300$多$ms$. $dp$的话跑的就比较快了. $dp[i]$表示输入$i$个字符的最小花费. 首先$dp ...

  10. Pass和ClassPath变量配置

    1.pass环境变量配置的是可执行性文件bin目录,是为了在任意盘符下都可以运行javac.exe和java.exe所配置的. 2.classpath环境变量记录的是java类运行文件所在的目录,一般 ...