一个强大的Android view looper 库:FlycoBanner-Matser

jopen 9年前

一个强大的android view looper 库,以简化日常开发这种高频率的功能。支持安卓2.2及更高版本。

Background

Image loop banner is high frequency used in most apps. So is the app of the company I work for. At first, this is only used in home page. Later with the app update, there are some simliar functions needed in other pages both image and text. I copy the same code here and there, finally I can not standing copying anymore. I explore on the github to find libs that meet my needs. Though I find some poewful libs, but the lib what I want should support view looping not only ImageView. And I do not want a lib having a ImageLoad Framework inside. So I decide to code a libray with features below:

  • Use Executors instead of Task
  • Supports both normal banner and endless auto loop banner
  • Supports inflate item view and logic operation such as loading image outside.
  • Supports set source using data list with different entity
  • Supports smartly pause scroll and continue scroll.
    • Touch down pause. Touch up continue.
    • Window of activty off pause.Window of activty on continue.
  • Supports inner indictaors
  • Supports page transformer (not often used in my daily work, just support this feature for others if needed)

Demo

Here is a DemoApk download

Gradle

dependencies{      compile 'com.android.support:support-v4:22.2.1'      compile 'com.nineoldandroids:library:2.4.0'      compile 'com.flyco.banner:FlycoBanner_Lib:1.0.1@aar'  }

Usage

Extends BaseIndicaorBanner and Set Data Type

public class SimpleImageBanner extends BaseIndicaorBanner<BannerItem, SimpleImageBanner> {      private ColorDrawable colorDrawable;        public SimpleImageBanner(Context context) {          this(context, null, 0);      }        public SimpleImageBanner(Context context, AttributeSet attrs) {          this(context, attrs, 0);      }        public SimpleImageBanner(Context context, AttributeSet attrs, int defStyle) {          super(context, attrs, defStyle);          colorDrawable = new ColorDrawable(Color.parseColor("#555555"));      }        @Override      public void onTitleSlect(TextView tv, int position) {          final BannerItem item = list.get(position);          tv.setText(item.title);      }        @Override      public View onCreateItemView(int position) {          View inflate = View.inflate(context, R.layout.adapter_simple_image, null);          ImageView iv = ViewFindUtils.find(inflate, R.id.iv);            final BannerItem item = list.get(position);          int itemWidth = dm.widthPixels;          int itemHeight = (int) (itemWidth * 360 * 1.0f / 640);          iv.setScaleType(ImageView.ScaleType.CENTER_CROP);          iv.setLayoutParams(new LinearLayout.LayoutParams(itemWidth, itemHeight));            String imgUrl = item.imgUrl;            if (!TextUtils.isEmpty(imgUrl)) {              Glide.with(context)                      .load(imgUrl)                      .override(itemWidth, itemHeight)                      .centerCrop()                      .placeholder(colorDrawable)                      .into(iv);          } else {              iv.setImageDrawable(colorDrawable);          }            return inflate;      }  }

项目主页:http://www.open-open.com/lib/view/home/1442666871993