android的ViewPager实现加载网络图片并自动轮播
16lz
2021-12-04
弄个图好看点。
阅读本文之前, 先看下前面打底的两篇文章。
- android的ViewPager实现伪循环效果
- android的ViewPager实现自动播放
前面已经实现了循环效果和自动播放, 现在我们来实现加载网络图片。
使用的是第三方库 facebook的Fresco。
原文
android的ViewPager实现加载网络图片并自动轮播
代码
同以前一样, 注意点用注释的形式给出。
这次需要注意下的地方有
build.gradle
中加入FrescoAndroidManifest.xml
中加入访问网络的权限App.java
中初始化Fresco
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.qefee.pj.testviewpager"> <uses-permission android:name="android.permission.INTERNET"/> <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> intent-filter> activity> application>manifest>
App.java
package com.qefee.pj.testviewpager;import android.app.Application;import com.facebook.drawee.backends.pipeline.Fresco;public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); // 初始化Fresco }}
MainActivity.java
package com.qefee.pj.testviewpager;import android.net.Uri;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.view.ViewGroup;import com.facebook.drawee.view.SimpleDraweeView;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class MainActivity extends AppCompatActivity { /** * log tag for MainActivity */ private static final String TAG = "MainActivity"; ViewPager viewPager; String[] imageUris = { "https://pic4.zhimg.com/03b2d57be62b30f158f48f388c8f3f33_b.png", "https://pic1.zhimg.com/4373a4f045e5e9ae16ebd6a624bf6228_b.png", "https://pic2.zhimg.com/0364e17a1561f48793993d8bf1cdc785_b.png", "https://pic2.zhimg.com/55fa74ff3eba164ed1db2037df1a8311_b.png", "https://pic4.zhimg.com/5dc30569c06e7c6266c9809f6eb80a7b_b.jpg" }; SimpleDraweeView[] simpleDraweeViews; int currentItem; private ScheduledExecutorService executor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int size = initSize(); initTextViews(size); initViewPager(); } @Override protected void onResume() { super.onResume(); startAutoScroll(); // activity激活时候自动播放 } @Override protected void onPause() { super.onPause(); stopAutoScroll(); // activity暂停时候停止自动播放 } private void startAutoScroll() { stopAutoScroll(); executor = Executors.newSingleThreadScheduledExecutor(); Runnable command = new Runnable() { @Override public void run() { selectNextItem(); } private void selectNextItem() { runOnUiThread(new Runnable() { @Override public void run() { viewPager.setCurrentItem(++currentItem); } }); } }; int delay = 2; int period = 2; TimeUnit timeUnit = TimeUnit.SECONDS; executor.scheduleAtFixedRate(command, delay, period, timeUnit); } private void stopAutoScroll() { if (executor != null) { executor.shutdownNow(); } } private void initViewPager() { viewPager = (ViewPager) findViewById(R.id.viewPage); viewPager.setAdapter(new PagerAdapter() { @Override public int getCount() { return Integer.MAX_VALUE; // 取一个大数字 } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { Log.i(TAG, "instantiateItem: instantiateItem + position = " + position); SimpleDraweeView t = simpleDraweeViews[position % simpleDraweeViews.length]; container.addView(t); Uri uri = Uri.parse(imageUris[position % simpleDraweeViews.length]); t.setImageURI(uri); return t; } @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.i(TAG, "destroyItem: + position = " + position); container.removeView((View) object); } }); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { currentItem = position; startAutoScroll(); // 手动切换完成后恢复自动播放 } @Override public void onPageScrollStateChanged(int state) { } }); currentItem = imageUris.length * 1000000; // 取一个中间的大数字, 防止接近边界 viewPager.setCurrentItem(currentItem); } private void initTextViews(int size) { SimpleDraweeView[] tvs = new SimpleDraweeView[size]; for (int i = 0; i < tvs.length; i++) { tvs[i] = new SimpleDraweeView(this); tvs[i].getHierarchy().setPlaceholderImage(R.mipmap.ic_launcher); ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); tvs[i].setLayoutParams(layoutParams); simpleDraweeViews = tvs; } } private int initSize() { int size; if (imageUris.length > 3) { size = imageUris.length; } else { size = imageUris.length * 2; // 小于3个时候, 需要扩大一倍, 防止出错 } return size; }}
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:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.qefee.pj.testviewpager.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewPage" android:layout_width="match_parent" android:layout_height="match_parent"/>RelativeLayout>
build.gradle (app)
apply plugin: 'com.android.application'android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.qefee.pj.testviewpager" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0'// 加入Fresco compile 'com.facebook.fresco:fresco:0.10.0'}
更多相关文章
- 一个问题解决。开心。哈哈。。。
- Android之初体验
- Android网络收音机项目
- Android网络收音机项目(源码实例分享)
- 最近Android有点烦
- Android使用VideoView播放网络视频
- Android中的网络时间同步
- Android中的网络时间同步
- Android(安卓)Layout布局文件里的android:layout_height等属性为