package com.csii.googlearc.view; import android.content.Context; import android.os.Handler; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ViewSwitcher; import com.csii.googlearc.R; import com.csii.googlearc.adapter.BaseViewSwitcherAdapter; /** * Created by Administrator on 2018/5/30. * 自定义会自动切换的ViewSwitcher */ public class AutoViewSwitcher extends ViewSwitcher { private BaseViewSwitcherAdapter mAdapter = null; private int currentPosition = -1; private ItemClickListener itemClickListener = null; private static final long delayMillis = 2 * 1000; private Handler mainHandler = new Handler(); private Runnable timerTask = new Runnable() { @Override public void run() { currentPosition++; formatPosition(); showNextData(currentPosition); mainHandler.postDelayed(this, delayMillis); } }; /** * 格式position */ private void formatPosition() { if (currentPosition < 0) { currentPosition = 0; } else if (currentPosition >= getAdapter().getCount()) { currentPosition = currentPosition % getAdapter().getCount(); } } public void setItemClickListener(ItemClickListener itemClickListener) { this.itemClickListener = itemClickListener; } public AutoViewSwitcher(Context context) { super(context); init(); } public AutoViewSwitcher(Context context, AttributeSet attrs) { super(context, attrs); init(); } public BaseViewSwitcherAdapter getAdapter() { return mAdapter; } public void setAdapter(BaseViewSwitcherAdapter mAdapter) { this.mAdapter = mAdapter; initAdapter(); } private void init() { Animation in = AnimationUtils.loadAnimation(getContext(), R.anim.anim_bottom_in); Animation out = AnimationUtils.loadAnimation(getContext(), R.anim.anim_top_out); this.setInAnimation(in); this.setOutAnimation(out); } private void initAdapter() { if (getAdapter() != null) { this.setFactory(new ViewFactory() { @Override public View makeView() { return getAdapter().getContentView(); } }); if (getAdapter().getCount() == 0) { for (int i = 0; i < getChildCount(); i++) { View childAt = getChildAt(i); childAt.setVisibility(View.INVISIBLE); } } else { for (int i = 0; i < getChildCount(); i++) { View childAt = getChildAt(i); childAt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (itemClickListener != null) { itemClickListener.onItemClick(currentPosition); } } }); childAt.setVisibility(View.VISIBLE); } loopViewSwitcher(); } } } private void showNextData(int position) { getAdapter().bindData(getNextView(), position); showNext(); } private void loopViewSwitcher() { mainHandler.post(timerTask); } public interface ItemClickListener { void onItemClick(int position); } /** * 停止动画 */ public void onStop() { mainHandler.removeCallbacks(timerTask); } /** * 开始动画 */ public void onStart() { onStop(); mainHandler.post(timerTask); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mainHandler != null) { mainHandler.removeCallbacks(timerTask); } } }
package com.csii.googlearc.adapter;
import android.view.View;
/**
* Created by Administrator on 2018/5/30.
*/
public interface BaseViewSwitcherAdapter {
/**
* 集合数量
* @return
*/
int getCount();
/**
* 可以绑定数据和Listener
* @param contentView
* @param position
*/
void bindData(View contentView,int position);
/**
* 提供View
* @return
*/
View getContentView();
}
package com.csii.googlearc.adapter;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.csii.googlearc.R;
import com.csii.googlearc.bean.SwitcherViewBean;
import java.util.List;
/**
* Created by Administrator on 2018/5/30.
*/
public class ViewSwitcherAdapter implements BaseViewSwitcherAdapter {
private List<SwitcherViewBean> mList = null;
private Context mContext = null;
public ViewSwitcherAdapter(Context context,List<SwitcherViewBean> mList) {
this.mContext = context;
this.mList = mList;
}
@Override
public int getCount() {
return mList == null ? 0 : mList.size();
}
@Override
public void bindData(View contentView,int position) {
SwitcherViewBean bean = mList.get(position);
TextView item_switcher_view_tv = (TextView) contentView.findViewById(R.id.item_switcher_view_tv);
ImageView item_switcher_view_img = (ImageView) contentView.findViewById(R.id.item_switcher_view_img);
item_switcher_view_tv.setText(bean.getMsg());
item_switcher_view_img.setImageResource(bean.getDrawableRes());
}
@Override
public View getContentView() {
View contentView = View.inflate(mContext, R.layout.item_view_switcher,null);
return contentView;
}
}
viewSwitcherAdapter = new ViewSwitcherAdapter(activity,mViewSwitcherList);
autoviewswitcher_test.setAdapter(viewSwitcherAdapter);
anim_bottom_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:interpolator="@android:anim/decelerate_interpolator"
android:shareInterpolator="true">
<translate
android:fromYDelta="100%"
android:toYDelta="0"></translate>
</set>
anim_top_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:interpolator="@android:anim/decelerate_interpolator"
android:shareInterpolator="true">
<translate
android:fromYDelta="0"
android:toYDelta="-100%"></translate>
</set>