搜索网络影视图片数据,展示为无限轮播图+ImageLoader
来源:互联网 发布:多益网络笔试 编辑:程序博客网 时间:2024/04/28 05:14
一. MainActivity.java
package activity.Movies;import android.os.AsyncTask;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import com.google.gson.Gson;import com.nostra13.universalimageloader.core.ImageLoader;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URLEncoder;import java.util.ArrayList;import java.util.List;import Adapter.MyPagerAdapter;import Bean.MovieBean;public class MainActivity extends AppCompatActivity { private TextView area; private TextView title; private EditText edit_name; private ViewPager viewPager; private LinearLayout linelayout; private ImageView image_cover; private List<ImageView> images; private MyPagerAdapter pagerAdapter; private List<MovieBean.ResultBean.ActSBean> list=new ArrayList<>(); private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what == 0){ int currentItem = viewPager.getCurrentItem(); viewPager.setCurrentItem(currentItem+1); //持续发送空消息 handler.sendEmptyMessageDelayed(0,2888); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); title = (TextView) findViewById(R.id.title); area = (TextView) findViewById(R.id.area); edit_name = (EditText) findViewById(R.id.edit_name); viewPager = (ViewPager) findViewById(R.id.viewPager); linelayout = (LinearLayout) findViewById(R.id.linear_layout); image_cover = (ImageView) findViewById(R.id.image_cover); //轮播图延时发送空消息,展示在某一页面 viewPager.setCurrentItem(list.size()%100000); handler.sendEmptyMessageDelayed(0,2888); } //点击搜索影片的方法 public void find(View view){ //先清空集合,再执行异步任务 list.clear(); MyTask task = new MyTask(); String movies = edit_name.getText().toString(); String encode = URLEncoder.encode(movies); if (!TextUtils.isEmpty(encode)){ task.execute("http://op.juhe.cn/onebox/movie/video?key=2189382719d77ad949572c948ad39072&q="+edit_name.getText().toString()); }else{ Toast.makeText(MainActivity.this,"请输入完整的影片名称!",Toast.LENGTH_SHORT).show(); } } //异步任务加载数据 class MyTask extends AsyncTask<String,String,String> { @Override protected String doInBackground(String... strings) { try { //客户端 HttpClient client = new DefaultHttpClient(); //get请求方式 HttpGet httpGet = new HttpGet(strings[0]); //响应对象 HttpResponse response = client.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode==200){ InputStream inputStream = response.getEntity().getContent(); String json = streamToString(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { MovieBean movieBean = new Gson().fromJson(result, MovieBean.class); //调用设置适配器的方法,设置展示数据 if (movieBean != null){ list.addAll(movieBean.getResult().getAct_s()); Log.i("集合", MainActivity.this.list.toString()); //初始化小圆点的方法 initCircle(); setAdapter(); } //把查询到的影片信息赋值 ImageLoader.getInstance().displayImage(movieBean.getResult().getCover(),image_cover); title.setText("片名:"+movieBean.getResult().getTitle()); area.setText("区域:"+movieBean.getResult().getArea()); } } private void initCircle() { //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置 images = new ArrayList<>(); //先清空移除所有的view linelayout.removeAllViews(); //集合数据对应的圆点 for (int i = 0;i<list.size();i++){ ImageView imageView = new ImageView(MainActivity.this); //刚开始显示时的顔色 if (i == 0){ imageView.setImageResource(R.drawable.button_selected); }else { imageView.setImageResource(R.drawable.button_select_no); } //把设置好的视图添加到集合中 images.add(imageView); //加入到线性布局中显示 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); //圆点之间的间距 params.setMargins(8,0,8,0); linelayout.addView(imageView,params); } } //设置适配器的方法 public void setAdapter() { //设置无限轮播图的适配器 if (pagerAdapter == null){ pagerAdapter = new MyPagerAdapter(MainActivity.this,list); viewPager.setAdapter(pagerAdapter); //viewPager页面改变的监听事件 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //如果选中了这一页,,,当前小圆点红色,,,否则绿色 for (int i = 0;i<images.size();i++){ if (i == position%images.size()){ images.get(i).setImageResource(R.drawable.button_selected); }else { images.get(i).setImageResource(R.drawable.button_select_no); } } } @Override public void onPageScrollStateChanged(int state) { } }); }else{ pagerAdapter.notifyDataSetChanged(); } } //Json数据解析的自定义方法 private String streamToString(InputStream inputStream, String encode) { try { //转换流 InputStreamReader streamReader = new InputStreamReader(inputStream, encode); //缓冲流 BufferedReader reader = new BufferedReader(streamReader); //缓冲区 StringBuilder builder = new StringBuilder(); //读取数据 String data = null; while ((data = reader.readLine())!=null){ builder.append(data); } //关流,返回数据 reader.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; }}
二. 自定义适配器类
package Adapter;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;import Bean.MovieBean;public class MyPagerAdapter extends PagerAdapter{ //声明变量 private Context context; private List<MovieBean.ResultBean.ActSBean> list; public MyPagerAdapter(Context context, List<MovieBean.ResultBean.ActSBean> list) { this.context = context; this.list = list; } @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) { ImageView imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(list.get(position%list.size()).getImage(),imageView); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); }}
三. ImageLoader类的辅助工具类
package Util;import android.app.Application;import android.content.Context;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;import com.nostra13.universalimageloader.utils.StorageUtils;import java.io.File;public class ImageUtil extends Application{ @Override public void onCreate() { super.onCreate(); inconfig(this); } //配置ImageLoader类 public void inconfig(Context context){ File cacheDir = StorageUtils.getCacheDirectory(context); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions .threadPriority(Thread.NORM_PRIORITY - 1) // default .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) .memoryCacheSize(2 * 1024 * 1024) .memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiscCache(cacheDir)) // default .diskCacheSize(50 * 1024 * 1024) .diskCacheFileCount(100) .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default .imageDownloader(new BaseImageDownloader(context)) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() .build(); ImageLoader.getInstance().init(config); }}
四. 自定义请求网络数据的Bean封装类
五. 布局xml文件:
1. 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" tools:context="activity.Movies.MainActivity"> <LinearLayout android:id="@+id/line" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true"> <EditText android:singleLine="true" android:inputType="text" android:hint="请输入电影名称" android:id="@+id/edit_name" android:layout_width="288dp" android:layout_marginLeft="30dp" android:layout_height="wrap_content" /> <Button android:text="搜索" android:onClick="find" android:layout_width="80dp" android:layout_height="40dp" android:layout_marginLeft="45dp"/> </LinearLayout> <RelativeLayout android:id="@+id/relative" android:layout_height="288dp" android:layout_marginTop="3dp" android:layout_below="@+id/line" android:layout_width="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/> <LinearLayout android:layout_alignBottom="@+id/viewPager" android:layout_centerHorizontal="true" android:layout_marginBottom="18dp" android:orientation="horizontal" android:id="@+id/linear_layout" android:layout_width="100dp" android:layout_height="28dp" > </LinearLayout> </RelativeLayout> <ImageView android:layout_width="500dp" android:layout_height="318dp" android:id="@+id/image_cover" android:layout_marginTop="50dp" android:layout_below="@+id/relative" android:layout_centerHorizontal="true"/> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" > <TextView android:id="@+id/title" android:textSize="18sp" android:layout_marginLeft="106dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/area" android:textSize="18sp" android:layout_marginLeft="36dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout></RelativeLayout>
2. drawable文件夹下轮播图中小圆点的实现代码
(1). button_selected.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#00FF7F"></solid> <corners android:radius="6dp"></corners> <size android:width="8dp" android:height="8dp"></size></shape>
(2). button_select_no.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFA07A"></solid> <corners android:radius="6dp"></corners> <size android:width="8dp" android:height="8dp"></size></shape>
最后在AndroidManifest.xml中声明网络请求权限和ImageLoader的name属性。
阅读全文
0 0
- 搜索网络影视图片数据,展示为无限轮播图+ImageLoader
- 网络数据请求展示为无限轮播图 ViewPager+XListView+Fragment+ImageLoader
- 无限轮播+网络请求+GridView展示数据+ImageLoader-SD卡缓存+点击轮播图跳转页面
- ImageLoader加载网络图片无限轮播
- Banner 网络图片无限轮播 ImageLoader
- ViewPager无限轮播,加载网络数据,ImageLoader加载图片并缓存到SD卡上
- ViewPager无限轮播,加载网络数据,ImageLoader加载图片并缓存到SD卡上
- ImageLoader获取网络数据图片
- 解析接口中的json串网络图片数据,实现效果为无限轮播图+小圆点
- imageloader加载网络图片
- ImageLoader网络加载图片
- ImageLoader网络加载图片
- ImageLoader获取网络图片
- ImageLoader获取网络图片
- 网络请求图片ImageLoader
- Xutils请求数据imageloader加载图片+网络判断
- ImageLoader+网络请求+List多条目展示
- ViewPager无限轮播加数据展示
- linux 安装nginx
- 王石:求学哈佛是华大基因汪建逼的 离开万科没和郁亮商量
- 运算符的重载程序在VC6.0中遇到的问题
- 今日作业
- Galaxy Note8对飚iPhone X,你更看好谁?
- 搜索网络影视图片数据,展示为无限轮播图+ImageLoader
- 51Nod 1007 正整数分组
- http协议学习笔记(3)
- Android 触摸事件
- dfs
- 源码免杀-过启发式的思路
- Spring--Aop_xml
- Android的IPC(Inter-progress Commitation)通信
- ucos系统使用delay函数死机原因