// retrofit2
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
//fresco
compile 'com.facebook.fresco:fresco:0.14.1'
//banner
compile 'com.youth.banner:banner:1.4.9'
// glide
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.jakewharton:butterknife:7.0.1'
public interface Iview { //获取请求好的数据 void getShowData(MovieBean movieBean);}
public class Api {
public static final String BASE_URL="http://api.svipmovie.com/front/";
}
public interface ApiService {
@FormUrlEncoded
@POST("columns/getVideoList.do")
Observable<MovieBean> getMovieData(@Field("catalogId") String catalogId, @Field("pnum") String pnum);
}
public interface Imodel {
//请求网路数据
void getHttpData(String url, String catalogId, String pnum);
}
public class HttpModel implements Imodel{
public static final String TAG="HttpModel";
private OnFinish onFinish;
//定义接口
public interface OnFinish{
void OnFinishListener(MovieBean movieBean);
}
public void setOnFinish(OnFinish finish){
this.onFinish=finish;
}
@Override
public void getHttpData(String url,String catalogId,String pnum) {
Retrofit retrofit = new Retrofit.Builder().baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//动态代理得到网络接口
ApiService apiService = retrofit.create(ApiService.class);
rx.Observable<MovieBean> movieData = apiService.getMovieData(catalogId,pnum);
movieData.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MovieBean>() {
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted: ");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError: ");
e.printStackTrace();
}
@Override
public void onNext(MovieBean movieBean) {
Log.d(TAG, "onNext: "+movieBean.getCode()+"========="+movieBean.getMsg());
onFinish.OnFinishListener(movieBean);
}
});
}
}
public class MyPresenter implements HttpModel.OnFinish{
//定义view和model接口的变量
private final Iview iview;
private final HttpModel httpModel;
public MyPresenter(Iview iview) {
this.iview = iview;
this.httpModel = new HttpModel();
httpModel.setOnFinish(this);
}
//传值到model中
public void setMovieData(String url,String catalogId,String pnum){
httpModel.getHttpData(url,catalogId,pnum);
}
@Override
public void OnFinishListener(MovieBean movieBean) {
//将数据传给iview的实现类
iview.getShowData(movieBean);
}
}
public class GlideImageLoader extends ImageLoader{
// @Override
// public void displayImage(Context context, Object path, ImageView imageView) {
//
// Uri uri = Uri.parse((String) path);
// imageView.setImageURI(uri);
// }
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load(path).into(imageView);
}
}
public class MyApp extends Application{
@Override
public void onCreate() {
super.onCreate();
//初始化fresco
Fresco.initialize(this);
}
}
public class MainActivity extends AppCompatActivity implements Iview{
@Bind(R.id.banner)
Banner banner;
@Bind(R.id.changePic)
Button changePic;
final String catalogId = "402834815584e463015584e539330016";
private List<String> imageTitle;
private List<String> imageArray;
private int randomNumber;
private MyPresenter myPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
myPresenter = new MyPresenter(this);
myPresenter.setMovieData(Api.BASE_URL, catalogId, randomNumber + "");
}
//随机数
public static int getRandomNumber(int min, int max) {
return new Random().nextInt(max) % (max - min + 1) + min;
}
@Override
public void getShowData(MovieBean movieBean) {
//设置图片加载集合
imageArray = new ArrayList<>();
//设置图片标题集合
imageTitle=new ArrayList<>();
// for (int i=0;i<movieBean.getRet().getList().size();i++){
// imageArray.add(movieBean.getRet().getList().get(i).getPic().toString());
// imageTitle.add(movieBean.getRet().getList().get(0).getTitle());
// Log.d("main", "getShowData: "+imageArray.get(i).toString());
// }
// //设置图片加载集合
// imageArray=new ArrayList<>();
// imageArray.add("http://img3.imgtn.bdimg.com/it/u=2758743658,581437775&fm=15&gp=0.jpg");
// imageArray.add("http://img3.imgtn.bdimg.com/it/u=2105877023,3759180926&fm=15&gp=0.jpg");
// imageArray.add("http://img2.imgtn.bdimg.com/it/u=1876814088,3589919070&fm=15&gp=0.jpg");
imageArray.add(movieBean.getRet().getList().get(0).getPic());
imageArray.add(movieBean.getRet().getList().get(1).getPic());
imageArray.add(movieBean.getRet().getList().get(2).getPic());
imageArray.add(movieBean.getRet().getList().get(3).getPic());
imageArray.add(movieBean.getRet().getList().get(4).getPic());
imageArray.add(movieBean.getRet().getList().get(5).getPic());
imageTitle.add(movieBean.getRet().getList().get(0).getTitle());
imageTitle.add(movieBean.getRet().getList().get(1).getTitle());
imageTitle.add(movieBean.getRet().getList().get(2).getTitle());
imageTitle.add(movieBean.getRet().getList().get(3).getTitle());
imageTitle.add(movieBean.getRet().getList().get(4).getTitle());
imageTitle.add(movieBean.getRet().getList().get(5).getTitle());
//设置banner样式
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
//设置图片加载器
banner.setImageLoader(new GlideImageLoader());
//设置图片集合
banner.setImages(imageArray);
//设置banner动画效果
banner.setBannerAnimation(Transformer.RotateDown);
//设置标题集合(当banner样式有显示title时)
banner.setBannerTitles(imageTitle);
banner.isAutoPlay(false);
//设置轮播时间
banner.setDelayTime(1500);
//设置指示器位置(当banner模式中有指示器时)
banner.setIndicatorGravity(BannerConfig.CENTER);
//banner设置方法全部调用完毕时最后调用
banner.start();
}
@OnClick({R.id.banner, R.id.changePic})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.banner:
break;
case R.id.changePic:
//生成随机数
randomNumber = getRandomNumber(1, 108);
break;
}
}
}
主页面布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
android:orientation="vertical"
tools:context="com.example.lx_201720171121_2.MainActivity">
<com.youth.banner.Banner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="430dp" />
<Button
android:layout_marginTop="15dp"
android:id="@+id/changePic"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="换一换" />
</LinearLayout>
在values文件下创建dimens
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>
