Android ViewPager加载图片效果

目前项目中需要用到ViewPager加载图片,现在在此记录一下。

首先先看布局文件:activity_main.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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.fly.viewpagerbanner.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_above="@+id/ll" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <LinearLayout android:id="@+id/ll" android:layout_marginTop="10.0dip" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="24.0dip" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true"/> </RelativeLayout>

MainActivity

package com.example.fly.viewpagerbanner; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 类名: * 类描述:ViewPager展示图片 * 创建人:fly * 创建日期: 2017/1/16. * 版本:V1.0 */ public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener,View.OnClickListener { private ViewPager vp; private ViewPagerAdapter vpAdapter; private List<Map<String, Object>> data; private int lastValue = -1; // 是不是最后一张图片 private ImageView[] dots; //底部小点图片 private int currentIndex; //记录当前选中位置 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Intent intent = new Intent(); // intent.putStringArrayListExtra("GalleryPlusActivity",ArrayList<String>); // 怎么传递集合 ArrayList<String> imageLists = getIntent().getStringArrayListExtra("GalleryPlusActivity"); // 动态获取展示图片的集合 data = getData(imageLists); vp = (ViewPager) findViewById(R.id.viewpager); vpAdapter = new ViewPagerAdapter(data,this); vp.setAdapter(vpAdapter); vp.addOnPageChangeListener(this); initDots();//初始化底部小点 } //这个方法长度是动态的,可以改成你从服务器获取的图片,这样数量就不确定啦 public List<Map<String, Object>> getData(ArrayList<String> imageLists) { List<Map<String, Object>> mData = new ArrayList<>(); // if (imageLists != null && imageLists.size() > 0) { // for (int i = 0; i < imageLists.size(); i++) { // Map<String, Object> map = new HashMap<>(); // map.put("url", imageLists.get(i)); // map.put("view", new ImageView(this)); // mData.add(map); // } // } Map<String, Object> map = new HashMap<>(); map.put("url", "http://img2.duitang.com/uploads/item/201207/19/20120719132725_UkzCN.jpeg"); map.put("view", new ImageView(this)); mData.add(map); Map<String, Object> map1 = new HashMap<>(); map1.put("url", "http://img4.duitang.com/uploads/item/201404/24/20140424195028_vtvZu.jpeg"); map1.put("view", new ImageView(this)); mData.add(map1); Map<String, Object> map2 = new HashMap<>(); map2.put("url", "http://download.pchome.net/wallpaper/pic-5041-8-240x320.jpg"); map2.put("view", new ImageView(this)); mData.add(map2); Map<String, Object> map3 = new HashMap<>(); map3.put("url", "http://www.mangowed.com/uploads/allimg/130425/572-130425105311304.jpg"); map3.put("view", new ImageView(this)); mData.add(map3); return mData; } private void initDots() { LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); mLayoutParams.setMargins(3, 0, 3, 0); LinearLayout ll = (LinearLayout) findViewById(R.id.ll); dots = new ImageView[data.size()]; //循环取得小点图片 for (int i = 0; i < data.size(); i++) { dots[i] = new ImageView(this); dots[i].setLayoutParams(mLayoutParams); dots[i].setBackgroundResource(R.drawable.dot); dots[i].setEnabled(true);//都设为灰色 dots[i].setOnClickListener(this); dots[i].setTag(i);//设置位置tag,方便取出与当前位置对应 ll.addView(dots[i]); } currentIndex = 0; dots[currentIndex].setEnabled(false);//设置为白色,即选中状态 } private void setCurView(int position) { /**设置当前的引导页*/ if (position < 0 || position >= data.size()) {return;} vp.setCurrentItem(position); } private void setCurDot(int position) { /**设置当前引导小点的选中*/ if (position < 0 || position > data.size() - 1 || currentIndex == position) {return;} dots[position].setEnabled(false); dots[currentIndex].setEnabled(true); currentIndex = position; } @Override //当前页面被滑动时调用 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { lastValue = position; } @Override public void onPageSelected(int position) { //当新的页面被选中时调用 setCurDot(position); //设置底部小点选中状态 } @Override public void onPageScrollStateChanged(int state) { //当滑动状态改变时调用 if(state == 0){ if(lastValue == data.size()-1){ Toast.makeText(this, "已经是最后一张了", Toast.LENGTH_SHORT).show(); } } } @Override public void onClick(View v) { int position = (Integer)v.getTag(); setCurView(position); setCurDot(position); } }

ViewPagerAdapter

package com.example.fly.viewpagerbanner; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import java.util.List; import java.util.Map; public class ViewPagerAdapter extends PagerAdapter { Context context; List<Map<String, Object>> viewLists; public ViewPagerAdapter(List<Map<String, Object>> lists, Context context) { this.viewLists = lists; this.context = context; } @Override public int getCount() { //获得size return viewLists.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup view, int position, Object object) { //销毁Item ImageView x = (ImageView) viewLists.get(position).get("view"); x.setScaleType(ImageView.ScaleType.FIT_CENTER); view.removeView(x); } @Override public Object instantiateItem(ViewGroup view, int position){ //实例化Item ImageView imageView = (ImageView) viewLists.get(position).get("view"); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); Glide.with(context) .load(viewLists.get(position).get("url").toString()) // .placeholder(R.mipmap.new_default) .error(R.mipmap.ic_launcher) .diskCacheStrategy(DiskCacheStrategy.RESULT) .into(imageView); view.addView(imageView, 0); return viewLists.get(position).get("view"); } }

是不是很简单。
最后附上demo:http://xiazai.jb51.net/201701/yuanma/ViewPager(jb51.net).rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-23 16:06:24

Android ViewPager加载图片效果的相关文章

android bitmap加载图片,然后涂鸦,实现橡皮擦功能

问题描述 android bitmap加载图片,然后涂鸦,实现橡皮擦功能 bitmap_temp = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888); @Override public void onDraw(Canvas canvas) { canvas.drawBitmap(mBitmap, 0, 0, null); } mPaint.setAlpha(0); mPaint.setXfermode

jquery 预加载图片效果插件与实例

文章一款告诉你如何利用jquery 预加载图片的实例教程,同时你也可以根据它出制作出漂亮的jquery 预加载图片效果哦. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/x

Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅

异步加载图片的例子,网上也比较多,大部分用了HashMap<String, SoftReference<Drawable>> imageCache ,但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠.另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应

Android使用ViewPager加载图片和轮播视频

作为Android基础组件之一,大家对viewpager已经很熟悉了,网上也有很多使用viewpager来加载图片的案例.但是像微信那样点击图片,可以轮播显示图片和视频的例子却没找到.正巧项目中有需求,可以就花时间写了下,现在给一下核心代码,希望对有此需求的同学们起一个抛砖引玉的作用.话不多说了,上代码: 以下是initData的代码 public void initData() { //把聊天界面的图片和视频找出来,并加到数组中,并在 //并根据传进来的position来找到视频或图片在数组中

我的Android进阶之旅------&amp;gt;android异步加载图片显示,并且对图片进行缓存实例

先来看看效果示意图: step1:新建项目DataAsyncLoad,如下图所示 step2:设置应用的UI界面 a.应用的主界面    main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="

实例演示Android异步加载图片(转)

本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个ImageView. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/a

实例演示Android异步加载图片

本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个ImageView. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/a

[Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画. github地址:https://github.com/wangjiegulu/ImageLoaderSample 解决了: 1. listview加载oom问题 2. listview加载时卡顿的现象 3. listview

android异步加载图片并缓存到本地实现方法

在android项目中访问网络图片是非常普遍性的事情,如果我们每次请求都要访问网络来获取图片,会非常耗费流量,而且图片占用内存空间也比较大,图片过多且不释放的话很容易造成内存溢出.针对上面遇到的两个问题,首先耗费流量我们可以将图片第一次加载上面缓存到本地,以后如果本地有就直接从本地加载.图片过多造成内存溢出,这个是最不容易解决的,要想一些好的缓存策略,比如大图片使用LRU缓存策略或懒加载缓存策略.今天首先介绍一下本地缓存图片. 首先看一下异步加载缓存本地代码: 复制代码 代码如下: public