Android Open Source - android-wheel Wheel Recycle






From Project

Back to project page android-wheel.

License

The source code is released under:

Apache License

If you think the Android project android-wheel listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 *  Android Wheel Control.//from  www .  j  av  a 2s. c  om
 *  https://code.google.com/p/android-wheel/
 *  
 *  Copyright 2011 Yuri Kanivets
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package kankan.wheel.widget;

import java.util.LinkedList;
import java.util.List;

import android.view.View;
import android.widget.LinearLayout;

/**
 * Recycle stores wheel items to reuse. 
 */
public class WheelRecycle {
  // Cached items
  private List<View> items;
  
  // Cached empty items
  private List<View> emptyItems;
  
  // Wheel view
  private WheelView wheel;
  
  /**
   * Constructor
   * @param wheel the wheel view
   */
  public WheelRecycle(WheelView wheel) {
    this.wheel = wheel;
  }

  /**
   * Recycles items from specified layout.
   * There are saved only items not included to specified range.
   * All the cached items are removed from original layout.
   * 
   * @param layout the layout containing items to be cached
   * @param firstItem the number of first item in layout
   * @param range the range of current wheel items 
   * @return the new value of first item number
   */
  public int recycleItems(LinearLayout layout, int firstItem, ItemsRange range) {
    int index = firstItem;
    for (int i = 0; i < layout.getChildCount();) {
      if (!range.contains(index)) {
        recycleView(layout.getChildAt(i), index);
        layout.removeViewAt(i);
        if (i == 0) { // first item
          firstItem++;
        }
      } else {
        i++; // go to next item
      }
      index++;
    }
    return firstItem;
  }
  
  /**
   * Gets item view
   * @return the cached view
   */
  public View getItem() {
    return getCachedView(items);
  }

  /**
   * Gets empty item view
   * @return the cached empty view
   */
  public View getEmptyItem() {
    return getCachedView(emptyItems);
  }
  
  /**
   * Clears all views 
   */
  public void clearAll() {
    if (items != null) {
      items.clear();
    }
    if (emptyItems != null) {
      emptyItems.clear();
    }
  }

  /**
   * Adds view to specified cache. Creates a cache list if it is null.
   * @param view the view to be cached
   * @param cache the cache list
   * @return the cache list
   */
  private List<View> addView(View view, List<View> cache) {
    if (cache == null) {
      cache = new LinkedList<View>();
    }
    
    cache.add(view);
    return cache;
  }

  /**
   * Adds view to cache. Determines view type (item view or empty one) by index.
   * @param view the view to be cached
   * @param index the index of view
   */
  private void recycleView(View view, int index) {
    int count = wheel.getViewAdapter().getItemsCount();

    if ((index < 0 || index >= count) && !wheel.isCyclic()) {
      // empty view
      emptyItems = addView(view, emptyItems);
    } else {
      while (index < 0) {
        index = count + index;
      }
      index %= count;
      items = addView(view, items);
    }
  }
  
  /**
   * Gets view from specified cache.
   * @param cache the cache
   * @return the first view from cache.
   */
  private View getCachedView(List<View> cache) {
    if (cache != null && cache.size() > 0) {
      View view = cache.get(0);
      cache.remove(0);
      return view;
    }
    return null;
  }

}




Java Source Code List

kankan.wheel.demo.CitiesActivity.java
kankan.wheel.demo.DateActivity.java
kankan.wheel.demo.PasswActivity.java
kankan.wheel.demo.SlotMachineActivity.java
kankan.wheel.demo.SpeedActivity.java
kankan.wheel.demo.Time2Activity.java
kankan.wheel.demo.TimeActivity.java
kankan.wheel.demo.WheelDemo.java
kankan.wheel.widget.ItemsRange.java
kankan.wheel.widget.OnWheelChangedListener.java
kankan.wheel.widget.OnWheelClickedListener.java
kankan.wheel.widget.OnWheelScrollListener.java
kankan.wheel.widget.WheelAdapter.java
kankan.wheel.widget.WheelRecycle.java
kankan.wheel.widget.WheelScroller.java
kankan.wheel.widget.WheelView.java
kankan.wheel.widget.adapters.AbstractWheelAdapter.java
kankan.wheel.widget.adapters.AbstractWheelTextAdapter.java
kankan.wheel.widget.adapters.AdapterWheel.java
kankan.wheel.widget.adapters.ArrayWheelAdapter.java
kankan.wheel.widget.adapters.NumericWheelAdapter.java
kankan.wheel.widget.adapters.WheelViewAdapter.java