栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android实现炫酷轮播图效果

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android实现炫酷轮播图效果

轮播图的实现有很多种方式,早先我在网上看了下别人写的轮播图,感觉都比较的墨守成规,有的还有可能加载不了网络图片。所以我在这里自己重新写了下轮播图 ,方便日后的项目使用.
在下面的代码中,我也用volley封装了网络请求框架,异步加载网络图片,也可以给大家参考,非常实用。

效果图:这只是其中的一种效果

底层封装的我在下面会一一展示,先看下在MainActivity中怎样调取这个轮播控件

package com.wujie.advertisment.activity;

import android.view.View;

import com.wujie.advertisment.R;
import com.wujie.advertisment.flashview.EffectConstants;
import com.wujie.advertisment.flashview.FlashView;

import java.util.ArrayList;

public class MainActivity extends baseActivity {
 private FlashView flashView;
 private ArrayList imageUrls=new ArrayList();
 @Override
 protected void initView() {
 setContentView(R.layout.activity_main);
 flashView=(FlashView)findViewById(R.id.flash_view);
 }

 @Override
 protected void initListener() {
 }

 @Override
 protected void initData() {


  imageUrls.add("1303680113,133301350&fm=21&gp=0.jpg");
  imageUrls.add("1350614941,725003865&fm=21&gp=0.jpg");
  imageUrls.add("3293842903,1040789920&fm=21&gp=0.jpg");
  imageUrls.add(",1368131788&fm=21&gp=0.jpg");

  flashView.setImageUris(imageUrls);
 
  flashView.setEffect(EffectConstants.CUBE_EFFECT);


// VolleyRequest.newInstance(IpAddressConstants.getAdnertisment("","")).newGsonRequest2(Request.Method.POST,IpAddressConstants.ADVERTISMENT_URL, Advertisment.class,
//  new Response.Listener() {
//   @Override
//   public void onResponse(Advertisment dvertisment) {
//   
//   flashView.setImageUris(imageUrls);
//   
//   flashView.setEffect(EffectConstants.CUBE_EFFECT);
//   }
//  }, new Response.ErrorListener() {
//   @Override
//   public void onErrorResponse(VolleyError volleyError) {
//
//   }
//  });
 }

 @Override
 public void onClick(View view) {

 }
}

MainActivity继承的baseActivity:

package com.wujie.advertisment.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.Toast;



public abstract class baseActivity extends AppCompatActivity implements View.OnClickListener{

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
 initView();
 initData();
 initListener();
 }
 
 protected abstract void initView();

 
 protected abstract void initListener();

 
 protected abstract void initData();

 
 public void showShortToast(String toast) {
 Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
 }
}

那么下面我就来封装Volley请求网络数据框架,封装好了之后,调用在MainActivity中有体现。
首先,VolleyRequest类如下:

package com.wujie.advertisment.volley;

import android.content.Context;
import android.util.Log;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;


public class VolleyRequest {
 private static RequestQueue mRequestQueue;
 private Map mMap=new HashMap<>();
 private VolleyRequest() {
 }
 private VolleyRequest(Map mMap) {

 this.mMap=mMap;
 }

 
 public static void buildRequestQueue(Context context) {
 mRequestQueue = Volley.newRequestQueue(context);
 //... do something
 }

 
 public static VolleyRequest newInstance() {
 if (mRequestQueue == null) {
  throw new NullPointerException("Call buildRequestQueue method first.");
 }
 //...
 return new VolleyRequest();
 }

 
 public static VolleyRequest newInstance(Map mMap) {
 if (mRequestQueue == null) {
  throw new NullPointerException("Call buildRequestQueue method first.");
 }
 //...
 Log.i("mtag","newInstance==========="+mMap.get("goodsname"));
 return new VolleyRequest(mMap);
 }

 
 public  GsonRequest newGsonRequest2(int method, String url, Class clazz, Response.Listener listener,
      Response.ErrorListener errorListener) {
 GsonRequest request = new GsonRequest(method,url, clazz, listener, errorListener){
  @Override
  protected Map getParams() {
  Log.i("mtag","getParams==========="+mMap.get("goodsname"));
  return mMap;
  }
 };

 mRequestQueue.add(request);
 return request;
 }

 
 public  GsonRequest newGsonRequest(String url, Class clazz, Response.Listener listener,
      Response.ErrorListener errorListener) {
 GsonRequest request = new GsonRequest(url, clazz, listener, errorListener);
 mRequestQueue.add(request);
 return request;
 }
}

GsonRequest类:

package com.wujie.advertisment.volley;

import android.util.Log;

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.UnsupportedEncodingException;



public class GsonRequest extends Request {

 private final Listener mListener;

 private static Gson mGson = new Gson();

 private Class mClass;
 private TypeToken mTypeToken;

 public GsonRequest(int method, String url, Class clazz, Listener listener,
   ErrorListener errorListener) {
 super(method, url, errorListener);
 mClass = clazz;
 mListener = listener;
 }

 public GsonRequest(int method, String url, TypeToken typeToken, Listener listener,
   ErrorListener errorListener) {
 super(method, url, errorListener);
 mTypeToken = typeToken;
 mListener = listener;
 }

 public GsonRequest(String url, Class clazz, Listener listener, ErrorListener errorListener) {
 this(Method.GET, url, clazz, listener, errorListener);
 }

 public GsonRequest(String url, TypeToken typeToken, Listener listener, ErrorListener errorListener) {
 super(Method.GET, url, errorListener);
 mTypeToken = typeToken;
 mListener = listener;
 }

 @Override
 protected Response parseNetworkResponse(NetworkResponse response) {
 try {
  String jsonString = new String(response.data,"UTF-8");
  Log.i("mtag","响应====="+response.data);
  if (mTypeToken == null)
  return Response.success(mGson.fromJson(jsonString, mClass),
   HttpHeaderParser.parseCacheHeaders(response));
  else
  return (Response) Response.success(mGson.fromJson(jsonString, mTypeToken.getType()),
   HttpHeaderParser.parseCacheHeaders(response));
 } catch (UnsupportedEncodingException e) {
  return Response.error(new ParseError(e));
 }
 }

 @Override
 protected void deliverResponse(T response) {
 mListener.onResponse(response);
 }

}

管理接口的类:

package com.wujie.advertisment.volley;

import java.util.HashMap;
import java.util.Map;



public class IpAddressConstants {
 public static String MYIP="http://xxxxx:8080/";

 
 public static final String ADVERTISMENT_URL=MYIP+"AppInterface/advert/indexAdvert";
 
 public static Map getAdnertisment(String city,String token){
 Map mMap=new HashMap<>();
 mMap.put("city_name",city);//这个key是你要上传参数的的key,服务器通过这个key来获取客户端穿的参数。
 mMap.put("token",token);
 return mMap;
 }
}

封装好后,我们要将Volley请求加入到队列中(初始化):

package com.wujie.advertisment.application;

import android.app.Application;
import android.content.Context;

import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.wujie.advertisment.volley.VolleyRequest;


public class MyApplication extends Application {

 public static Context mContext;
 @Override
 public void onCreate() {
 super.onCreate();
 mContext = getApplicationContext();
 VolleyRequest.buildRequestQueue(this);
 initImageLoader();
 }

 private void initImageLoader() {
 
 ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
  .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
  .diskCacheFileCount(100)
  .memoryCacheSize(2 * 1024 * 1024) //设置内存的缓存
  .diskCacheSize(50 * 1024 * 1024) //设置磁盘缓存的大小
  .threadPoolSize(4) //设置线程池的大小是多少
  .build();
 //设置配置信息this
// ImageLoader.getInstance().init(new ImageLoaderConfiguration.Builder(this).build());
 ImageLoader.getInstance().init(configuration);
// ImageLoaderConfiguration aDefault = ImageLoaderConfiguration.createDefault(this);

 }
}

到此为止,网络请求框架就封装好了,下面就是轮播图的实现,因为代码文件比较多,我就不一一列举出来了,如果大家有需要可以找我要整个代码。

注意点:

1. 轮播图图片描述字体资源文件的导入
2. 网络请求框架的初始化

下载demo

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/155593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号