-
package com.example.week01demo; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast; import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson; import java.nio.channels.Pipe;
import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity {
private ArrayList<Integer> types=new ArrayList<>();
private AutoBanner banner; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banner=(AutoBanner)findViewById(R.id.banner);
StringRequest stringRequest = new StringRequest("https://www.zhaoapi.cn/ad/getAd", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response != null && !response.equals("")) {
Gson gson=new Gson();
Bean bean= gson.fromJson(response,Bean.class);
if(bean.getData()!=null&&bean.getData().size()>0){
List<Bean.DataBean> dataBeans=bean.getData();
ArrayList<String> urls=new ArrayList<>();
types.clear();
for(int i=0;i<dataBeans.size();i++){
Bean.DataBean bean1=dataBeans.get(i);
if(bean1!=null&&bean1.getIcon()!=null&&!bean1.getIcon().equals("")){
urls.add( bean1.getIcon());
types.add(bean1.getType());
}
}
banner.load(urls).setOnAutoBannerListener(new AutoBanner.AutoBannerListener() {
@Override
public void onClickListener(int postion) {
int type=types.get(postion);
Toast.makeText(MainActivity.this,types.get(postion)+"",Toast.LENGTH_SHORT).show();
}
}).display();
}
} }
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) { }
});
Volley.newRequestQueue(this).add(stringRequest); } @Override
protected void onStart() {
super.onStart();
banner.startAuto();
}
}
-
package com.example.week01demo; import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView; import com.bumptech.glide.Glide; import java.util.ArrayList;
import java.util.List; public class AutoBannerPagerAdapter extends PagerAdapter {
private Context mContext;
private List<String> mImgUrls;
private List<View> mImageViews;
private AutoBanner.AutoBannerListener mAutoBannerListener;
public AutoBannerPagerAdapter(Context context,List<String> urls,AutoBanner.AutoBannerListener mAutoBannerListener){
this.mContext=context;
this.mImgUrls=urls;
this.mAutoBannerListener=mAutoBannerListener;
mImageViews=new ArrayList<>();
for (int i = 0; i < urls.size(); i++) {
ImageView imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
mImageViews.add(imageView);
}
}
@Override
public int getCount() {
return mImageViews.size();
} @Override
public boolean isViewFromObject(View view, Object object) { return view == object;
} @Override
public Object instantiateItem(ViewGroup container, final int position) {
container.addView(mImageViews.get(position));
ImageView view = (ImageView) mImageViews.get(position);
Glide.with(mContext).load(mImgUrls.get(position)).into(view);
if (mAutoBannerListener != null) {
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAutoBannerListener.onClickListener(position);
}
});
}
return view;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
-
package com.example.week01demo; import android.content.Context;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout; import java.util.ArrayList;
import java.util.List; public class AutoBanner extends FrameLayout implements ViewPager.OnPageChangeListener{
private Context mContext;
private List<String> mImgUrls;
private List<ImageView> mIndicatorViews;
private LinearLayout mIndicatorLayout;
private ViewPager mViewPager;
private AutoBannerListener mAutoBannerListener;
private AutoBannerPagerAdapter mAutoBannerPagerAdapter;
private int count;
private float ratio = 1.78f;//圖檔寬高比
//自動輪播
private boolean isAuto=true;
private Handler mAutoHandler = new Handler();
private int currentItem;
private int delayTime = 1000; public AutoBanner(@NonNull Context context) {
super(context);
init(context);
} public AutoBanner(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
} public AutoBanner(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
} private void init(Context context){
this.mContext = context;
mImgUrls = new ArrayList<>();
mIndicatorViews = new ArrayList<>();
View view = LayoutInflater.from(context).inflate(R.layout.auto_banner_layout, this, true);
mViewPager = (ViewPager) view.findViewById(R.id.banner_viewpager);
mIndicatorLayout = (LinearLayout) view.findViewById(R.id.circleIndicator);
} @Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
initViewPagerParams();
}
private void initViewPagerParams() {
ViewGroup.LayoutParams params = mViewPager.getLayoutParams();
params.width = getMeasuredWidth();
params.height = (int) (params.width / ratio);
mViewPager.setLayoutParams(params); }
public AutoBanner load(List<String> imgs) {
this.mImgUrls = imgs;
this.count = mImgUrls.size();
return this;
}
public AutoBanner display() {
//viewpager的設定
setViewPager();
//小圓點設定
setIndicators();
return this;
}
private void setViewPager() {
if (count == 0) {
return;
}
if (mAutoBannerPagerAdapter == null) {
mAutoBannerPagerAdapter = new AutoBannerPagerAdapter(mContext,mImgUrls,mAutoBannerListener);
mViewPager.addOnPageChangeListener(this);
} mViewPager.setAdapter(mAutoBannerPagerAdapter);
mViewPager.setCurrentItem(0); if (isAuto) {
startAuto();
}
}
public void startAuto() {
mAutoHandler.removeCallbacks(task);
mAutoHandler.postDelayed(task, delayTime);
} public void stopAuto() {
mAutoHandler.removeCallbacks(task);
} private final Runnable task = new Runnable() {
@Override
public void run() {
if (count > 1 && isAuto) { if (currentItem >= count) {
currentItem = 0;
}
mViewPager.setCurrentItem(currentItem);
mAutoHandler.postDelayed(task, delayTime);
Log.i("autobanner", "curr:" + currentItem + " count:" + count);
}
}
}; private void setIndicators() { mIndicatorViews.clear();
mIndicatorLayout.removeAllViews();
if (count < 2) {//一個view時不繪制訓示器
return;
}
for (int i = 0; i < count; i++) { ImageView imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
layoutParams.leftMargin = 30;
layoutParams.rightMargin = 30;
if (i == 0) {
imageView.setImageResource(R.drawable.indicator_selected);
} else {
imageView.setImageResource(R.drawable.indicator_unselect);
}
//添加進數組
mIndicatorViews.add(imageView);
//添加進試圖。LinearLayout
mIndicatorLayout.addView(imageView, layoutParams);
}
}
public AutoBanner setOnAutoBannerListener(AutoBannerListener listener) { this.mAutoBannerListener = listener; return this; } @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
currentItem = position % count + 1; } @Override
public void onPageSelected(int position) { for (int i = 0; i < count; i++) { if (i == position) {
mIndicatorViews.get(i).setImageResource(R.drawable.indicator_selected);
} else {
mIndicatorViews.get(i).setImageResource(R.drawable.indicator_unselect);
} } } @Override
public void onPageScrollStateChanged(int state) { }
public interface AutoBannerListener {
void onClickListener(int postion);
}
//監聽手勢點選;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (isAuto) {
int action = ev.getAction();
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL
|| action == MotionEvent.ACTION_OUTSIDE) {
startAuto();
} else if (action == MotionEvent.ACTION_DOWN) {
stopAuto();
}
}
return super.dispatchTouchEvent(ev);
}
}
-
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
tools:context="com.example.week01demo.MainActivity"> <com.example.week01demo.AutoBanner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="wrap_content"></com.example.week01demo.AutoBanner> </android.support.constraint.ConstraintLayout>
-
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"> <android.support.v4.view.ViewPager
android:id="@+id/banner_viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"/> <LinearLayout
android:id="@+id/circleIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp" /> </FrameLayout>
-
apply plugin: 'com.android.application' android {
compileSdkVersion 26
buildToolsVersion "27.0.1"
defaultConfig {
applicationId "com.example.week01demo"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
} } dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support.test.espresso:espresso-core:3.0.1', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.github.bumptech.glide:glide:4.0.0-RC1'
compile 'com.google.code.gson:gson:2.6.2'
}