package android.wheel.test;
import java.util.LinkedList;
import java.util.List;
import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.GradientDrawable.Orientation;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Interpolator;
import android.wheel.R;
import android.wheel.test.adapter.WheelViewAdapter;
import android.widget.LinearLayout;
/**
* Numeric wheel view.
*
* @author Yuri Kanivets
*/
public class WheelView extends View {
/** Top and bottom shadows colors */
private static final int[] SHADOWS_COLORS = new int[] { 0xFF111111,
0x00AAAAAA, 0x00AAAAAA };
/** Top and bottom items offset (to hide that) */
private static final int ITEM_OFFSET_PERCENT = 10;
/** Left and right padding value */
private static final int PADDING = 10;
/** Default count of visible items */
private static final int DEF_VISIBLE_ITEMS = 5;
// Wheel Values
private int currentItem = 0;
// Count of visible items
private int visibleItems = DEF_VISIBLE_ITEMS;
// Item height
private int itemHeight = 0;
// Center Line
private Drawable centerDrawable;
// Shadows drawables
private GradientDrawable topShadow;
private GradientDrawable bottomShadow;
// Scrolling
private WheelScroller scroller;
private boolean isScrollingPerformed;
private int scrollingOffset;
// Cyclic
boolean isCyclic = false;
// Items layout
private LinearLayout itemsLayout;
// The number of first item in layout
private int firstItem;
// View adapter
private WheelViewAdapter viewAdapter;
// Recycle
private WheelRecycle recycle = new WheelRecycle(this);
// Listeners
private List<OnWheelChangedListener> changingListeners = new LinkedList<OnWheelChangedListener>();
private List<OnWheelScrollListener> scrollingListeners = new LinkedList<OnWheelScrollListener>();
private List<OnWheelClickedListener> clickingListeners = new LinkedList<OnWheelClickedListener>();
/**
* Constructor
*/
public WheelView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initData(context);
}
/**
* Constructor
*/
public WheelView(Context context, AttributeSet attrs) {
super(context, attrs);
initData(context);
}
/**
* Constructor
*/
public WheelView(Context context) {
super(context);
initData(context);
}
/**
* Initializes class data
* @param context the context
*/
private void initData(Context context) {
scroller = new WheelScroller(getContext(), scrollingListener);
}
// Scrolling listener
WheelScroller.ScrollingListener scrollingListener = new WheelScroller.ScrollingListener() {
public void onStarted() {
isScrollingPerformed = true;
notifyScrollingListenersAboutStart();
}
public void onScroll(int distance) {
doScroll(distance);
int height = getHeight();
if (scrollingOffset > height) {
scrollingOffset = height;
scroller.stopScrolling();
} else if (scrollingOffset < -height) {
scrollingOffset = -height;
scroller.stopScrolling();
}
}
public void onFinished() {
if (isScrollingPerformed) {
notifyScrollingListenersAboutEnd();
isScrollingPerformed = false;
}
scrollingOffset = 0;
invalidate();
}
public void onJustify() {
if (Math.abs(scrollingOffset) > WheelScroller.MIN_DELTA_FOR_SCROLLING) {
scroller.scroll(scrollingOffset, 0);
}
}
};
/**
* Set the the specified scrolling interpolator
* @param interpolator the interpolator
*/
public void setInterpolator(Interpolator interpolator) {
scroller.setInterpolator(interpolator);
}
/**
* Gets count of visible items
*
* @return the count of visible items
*/
public int getVisibleItems() {
return visibleItems;
}
/**
* Sets the desired count of visible items.
* Actual amount of visible items depends on wheel layout parameters.
* To apply changes and rebuild view call measure().
*
* @param count the desired count for visible items
*/
public void setVisibleItems(int count) {
visibleItems = count;
}
/**
* Gets view adapter
* @return the view adapter
*/
public WheelViewAdapter getViewAdapter() {
return viewAdapter;
}
// Adapter listener
private DataSetObserver dataObserver = new DataSetObserver() {
@Override
public void onChanged() {
invalidateWheel(false);
}
@Override
public void onInvalidated() {
invalidateWheel(true);
}
};
/**
* Sets view adapter. Usually new adapters contain different views, so
* it needs to rebuild view by calling measure().
*
* @param viewAdapter the view adapter
*/
public void setViewAdapter(WheelViewAdapter viewAdapter) {
if (this.viewAdapter != null) {
this.viewAdapter.unregisterDataSetObserver(dataObserver);
}
this.viewAdapter = viewAdapter;
if (this.viewAdapter != null) {
this.viewAdapter.registerDataSetObserver(dataObserver);
}
invalidateWheel(true);
}
/**
* Adds wheel changing listener
* @param listener the listener
*/
public void addChangingListener(OnWheelChangedListener listener) {
changingListeners.add(listener);
}
/**
* Removes wheel changing listener
* @param listener the listener
*/
public void removeChangingListener(OnWheelChangedListener listener) {
changingListeners.remove(listener);
}
/**
* Notifies changing listeners
* @param oldValue the old wheel value
* @param newValue the new wheel value
*/
protected void notifyChangingListeners(int oldValue, int newValue) {
for (OnWheelChangedListener listener : changingListeners) {
listener.onChanged(this, oldValue, newValue);
}
}
/**
* Adds wheel scrolling listener
* @param listener the listener
*/
public void addScrollingListener(OnWheelScrollListener listener) {
scrollingListeners.add(listener);
}
/**
* Removes wheel scrolling listener
* @param listener the listener
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
GW_Wheel.rar (66个子文件)
GW_Wheel
AndroidManifest.xml 671B
res
layout
country_layout.xml 817B
main.xml 1KB
drawable-ldpi
icon.png 2KB
drawable
ukraine.png 131B
canada.png 984B
usa.png 3KB
france.png 151B
wheel_val.xml 315B
layout_bg.xml 250B
wheel_bg.xml 742B
drawable-mdpi
icon.png 3KB
xml
drawable-hdpi
icon.png 4KB
values
strings.xml 160B
proguard.cfg 1KB
src
android
wheel
main.java 4KB
test
OnWheelClickedListener.java 305B
WheelAdapter.java 719B
WheelView.java 30KB
OnWheelChangedListener.java 393B
ItemsRange.java 2KB
WheelScroller.java 7KB
adapter
AbstractWheelTextAdapter.java 8KB
NumericWheelAdapter.java 2KB
AdapterWheel.java 1016B
WheelViewAdapter.java 2KB
ArrayWheelAdapter.java 1003B
AbstractWheelAdapter.java 2KB
OnWheelScrollListener.java 457B
WheelRecycle.java 4KB
bin
GW_Wheel.apk 36KB
android
wheel
main$CountryAdapter.class 2KB
main$2.class 1KB
R.class 496B
main.class 3KB
R$layout.class 417B
R$attr.class 325B
main$1.class 1KB
R$id.class 462B
R$string.class 412B
R$drawable.class 601B
test
WheelScroller$1.class 1KB
ItemsRange.class 871B
WheelScroller.class 4KB
WheelView.class 16KB
OnWheelChangedListener.class 202B
WheelAdapter.class 223B
WheelScroller$ScrollingListener.class 326B
WheelView$1.class 2KB
OnWheelClickedListener.class 205B
adapter
AbstractWheelAdapter.class 2KB
ArrayWheelAdapter.class 1KB
WheelViewAdapter.class 456B
AdapterWheel.class 1018B
NumericWheelAdapter.class 2KB
AbstractWheelTextAdapter.class 5KB
WheelView$2.class 709B
WheelRecycle.class 3KB
WheelScroller$2.class 2KB
OnWheelScrollListener.class 237B
classes.dex 30KB
resources.ap_ 19KB
.classpath 280B
assets
default.properties 362B
.project 844B
gen
android
wheel
R.java 1KB
共 66 条
- 1
资源评论
- jason_lawf2013-04-27这个貌似跟gallery没有关系的吧
- jakeyboy2012-08-21这个只是单纯的滚动,并不能拖动,需要的朋友先好好看再下载哈,如果用在其他地方倒是很方便!
fish0289
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功