Skip to content

Commit

Permalink
1.4.1版本提交
Browse files Browse the repository at this point in the history
  • Loading branch information
youth5201314 committed Oct 8, 2016
1 parent c5ed3d5 commit 0b57cee
Show file tree
Hide file tree
Showing 11 changed files with 320 additions and 54 deletions.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
Gradle
```groovy
dependencies{
compile 'com.youth.banner:banner:1.4' //最新版本
compile 'com.youth.banner:banner:1.4.1' //最新版本
or
compile 'com.youth.banner:banner:1.3.3' //旧版本
}
Expand Down Expand Up @@ -264,6 +264,12 @@ protected void onCreate(Bundle savedInstanceState) {

## 更新说明

#### v1.4.1
bug修改<感谢深圳-放飞,台北-Tom>
* 第一次加载一张图片(不能滑动[正常])-->刷新-->第二次加载多张图片(不能滑动[bug])
* 滑动事件传递拦截优化
* demo里添加了下拉刷新和RecyclerView添加头部的两种方式

#### v1.4
全新升级,此次更新比较大,如果不习惯使用1.4的还是可以用1.3.3
* 去掉app:default_image="默认加载图片",需要可以自己在图片加载器中设置
Expand Down
16 changes: 8 additions & 8 deletions app/app.iml
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
Expand All @@ -81,6 +73,14 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
Expand Down
70 changes: 55 additions & 15 deletions app/src/main/java/com/test/banner/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,71 @@
package com.test.banner;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;

import com.test.banner.common.BaseRecyclerAdapter;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
import com.youth.banner.listener.OnBannerClickListener;

import java.util.Arrays;


public class MainActivity extends AppCompatActivity {
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
static final int REFRESH_COMPLETE = 0X1112;
SwipeRefreshLayout mSwipeLayout;
RecyclerView recyclerView;
Banner banner;
String[] images,titles;
String[] images, titles;
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case REFRESH_COMPLETE:
images = getResources().getStringArray(R.array.url2);
banner.setImages(Arrays.asList(images)).start();
mSwipeLayout.setRefreshing(false);
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
images= getResources().getStringArray(R.array.url2);
titles= getResources().getStringArray(R.array.title);
images = getResources().getStringArray(R.array.url);
titles = getResources().getStringArray(R.array.title);

mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe);
mSwipeLayout.setOnRefreshListener(this);

recyclerView= (RecyclerView) findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
BaseRecyclerAdapter adapter = new BaseRecyclerAdapter<>(new SampleAdapter());

banner = (Banner) findViewById(R.id.banner);
/**
* 将banner添加到recyclerView头部
*/
View header= LayoutInflater.from(this).inflate(R.layout.header,null);
banner = (Banner) header.findViewById(R.id.banner);
//如果你不需要用xml的属性,那么也可以直接创建对象来实现
// banner=new Banner(this);
banner.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,200));
adapter.addHeader(banner);
recyclerView.setAdapter(adapter);

/**
* 如果在当前布局文件就直接使用
* banner = (Banner) findViewById(R.id.banner);
*/

//简单使用
banner.setImages(Arrays.asList(images)).setImageLoader(new GlideImageLoader()).start();
Expand All @@ -56,7 +91,7 @@ protected void onCreate(Bundle savedInstanceState) {
banner.setOnBannerClickListener(new OnBannerClickListener() {
@Override
public void OnBannerClick(int position) {
Toast.makeText(getApplicationContext(),"点击:"+position,Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "点击:" + position, Toast.LENGTH_SHORT).show();
}
});
}
Expand All @@ -66,16 +101,21 @@ public void OnBannerClick(int position) {
@Override
protected void onStart() {
super.onStart();
Log.i("--","onStart");
Log.i("--", "onStart");
//开始轮播
banner.startAutoPlay();
}

@Override
protected void onStop() {
super.onStop();
Log.i("--","onStop");
Log.i("--", "onStop");
//结束轮播
banner.stopAutoPlay();
}

@Override
public void onRefresh() {
mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 2000);
}
}
49 changes: 49 additions & 0 deletions app/src/main/java/com/test/banner/SampleAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.test.banner;

import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.TextView;


public class SampleAdapter extends RecyclerView.Adapter<SampleAdapter.ViewHolder> {

private static final int NUM_ITEMS = 30;

private String[] mDataset;

public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}

public SampleAdapter() {
mDataset = new String[NUM_ITEMS];
for (int i = 0; i < NUM_ITEMS; i++) {
mDataset[i] = String.valueOf(i);
}
}

@Override
public SampleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
TextView textView = new TextView(parent.getContext());
textView.setTextSize(16f);
textView.setGravity(Gravity.CENTER);
textView.setPadding(10,10,10,10);
return new ViewHolder(textView);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText("This is item " + mDataset[position]);
}

@Override
public int getItemCount() {
return mDataset.length;
}
}
172 changes: 172 additions & 0 deletions app/src/main/java/com/test/banner/common/BaseRecyclerAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
package com.test.banner.common;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;


public class BaseRecyclerAdapter<T extends RecyclerView.Adapter> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private final T mBase;

/**
* Defines available view type integers for headers and footers.
*
* How this works:
* - Regular views use view types starting from 0, counting upwards
* - Header views use view types starting from -1000, counting upwards
* - Footer views use view types starting from -2000, counting upwards
*
* This means that you're safe as long as the base adapter doesn't use negative view types,
* and as long as you have fewer than 1000 headers and footers
*/
private static final int HEADER_VIEW_TYPE = -1000;
private static final int FOOTER_VIEW_TYPE = -2000;

private final List<View> mHeaders = new ArrayList<View>();
private final List<View> mFooters = new ArrayList<View>();

/**
* Constructor.
*
* @param base
* the adapter to wrap
*/
public BaseRecyclerAdapter(T base) {
super();
mBase = base;
}

/**
* Gets the base adapter that this is wrapping.
*/
public T getWrappedAdapter() {
return mBase;
}

/**
* Adds a header view.
*/
public void addHeader(@NonNull View view) {
if (view == null) {
throw new IllegalArgumentException("You can't have a null header!");
}
mHeaders.add(view);
}

/**
* Adds a footer view.
*/
public void addFooter(@NonNull View view) {
if (view == null) {
throw new IllegalArgumentException("You can't have a null footer!");
}
mFooters.add(view);
}

/**
* Toggles the visibility of the header views.
*/
public void setHeaderVisibility(boolean shouldShow) {
for (View header : mHeaders) {
header.setVisibility(shouldShow ? View.VISIBLE : View.GONE);
}
}

/**
* Toggles the visibility of the footer views.
*/
public void setFooterVisibility(boolean shouldShow) {
for (View footer : mFooters) {
footer.setVisibility(shouldShow ? View.VISIBLE : View.GONE);
}
}

/**
* @return the number of headers.
*/
public int getHeaderCount() {
return mHeaders.size();
}

/**
* @return the number of footers.
*/
public int getFooterCount() {
return mFooters.size();
}

/**
* Gets the indicated header, or null if it doesn't exist.
*/
public View getHeader(int i) {
return i < mHeaders.size() ? mHeaders.get(i) : null;
}

/**
* Gets the indicated footer, or null if it doesn't exist.
*/
public View getFooter(int i) {
return i < mFooters.size() ? mFooters.get(i) : null;
}

private boolean isHeader(int viewType) {
return viewType >= HEADER_VIEW_TYPE && viewType < (HEADER_VIEW_TYPE + mHeaders.size());
}

private boolean isFooter(int viewType) {
return viewType >= FOOTER_VIEW_TYPE && viewType < (FOOTER_VIEW_TYPE + mFooters.size());
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if (isHeader(viewType)) {
int whichHeader = Math.abs(viewType - HEADER_VIEW_TYPE);
View headerView = mHeaders.get(whichHeader);
return new RecyclerView.ViewHolder(headerView) { };
} else if (isFooter(viewType)) {
int whichFooter = Math.abs(viewType - FOOTER_VIEW_TYPE);
View footerView = mFooters.get(whichFooter);
return new RecyclerView.ViewHolder(footerView) { };

} else {
return mBase.onCreateViewHolder(viewGroup, viewType);
}
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
if (position < mHeaders.size()) {
// Headers don't need anything special

} else if (position < mHeaders.size() + mBase.getItemCount()) {
// This is a real position, not a header or footer. Bind it.
mBase.onBindViewHolder(viewHolder, position - mHeaders.size());

} else {
// Footers don't need anything special
}
}

@Override
public int getItemCount() {
return mHeaders.size() + mBase.getItemCount() + mFooters.size();
}

@Override
public int getItemViewType(int position) {
if (position < mHeaders.size()) {
return HEADER_VIEW_TYPE + position;

} else if (position < (mHeaders.size() + mBase.getItemCount())) {
return mBase.getItemViewType(position - mHeaders.size());

} else {
return FOOTER_VIEW_TYPE + position - mHeaders.size() - mBase.getItemCount();
}
}
}
Loading

0 comments on commit 0b57cee

Please sign in to comment.