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 (84个子文件)
GW_Wheel
bin
GW_Wheel.apk 82KB
classes.dex 42KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable
usa.png 3KB
canada.png 984B
france.png 151B
ukraine.png 131B
drawable-mdpi
icon.png 2KB
jarlist.cache 120B
dexedLibs
annotations-2e2859abdd0c0a7cd33416115a9d3d13.jar 943B
classes
android
wheel
main.class 3KB
main$2.class 1KB
BuildConfig.class 335B
Util.class 2KB
R$layout.class 417B
R$id.class 466B
R$drawable.class 601B
AssetsDatabaseManager.class 5KB
test
WheelAdapter.class 223B
OnWheelClickedListener.class 205B
WheelView$2.class 709B
WheelView.class 15KB
OnWheelScrollListener.class 237B
WheelScroller$1.class 1KB
ItemsRange.class 846B
WheelView$1.class 2KB
WheelRecycle.class 3KB
WheelScroller$ScrollingListener.class 326B
adapter
AdapterWheel.class 1018B
AbstractWheelTextAdapter.class 5KB
ArrayWheelAdapter.class 1KB
AbstractWheelAdapter.class 2KB
NumericWheelAdapter.class 1KB
WheelViewAdapter.class 456B
OnWheelChangedListener.class 202B
WheelScroller$2.class 2KB
WheelScroller.class 4KB
R$attr.class 325B
R.class 496B
main$CountryAdapter.class 2KB
R$string.class 412B
main$1.class 1KB
resources.ap_ 62KB
AndroidManifest.xml 889B
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable
layout_bg.xml 250B
wheel_bg.xml 742B
usa.png 3KB
wheel_val.xml 315B
canada.png 984B
france.png 151B
ukraine.png 131B
values
strings.xml 160B
drawable-mdpi
icon.png 3KB
layout
country_layout.xml 750B
main.xml 1KB
xml
assets
chinacity.db 109KB
gen
android
wheel
BuildConfig.java 155B
R.java 1KB
proguard.cfg 1KB
.settings
org.eclipse.core.resources.prefs 55B
src
android
wheel
main.java 4KB
test
OnWheelClickedListener.java 305B
WheelAdapter.java 719B
WheelScroller.java 7KB
ItemsRange.java 2KB
WheelView.java 30KB
OnWheelChangedListener.java 393B
adapter
WheelViewAdapter.java 2KB
NumericWheelAdapter.java 2KB
AbstractWheelAdapter.java 1KB
ArrayWheelAdapter.java 985B
AbstractWheelTextAdapter.java 8KB
AdapterWheel.java 998B
OnWheelScrollListener.java 457B
WheelRecycle.java 4KB
AssetsDatabaseManager.java 7KB
Util.java 2KB
.project 844B
.classpath 475B
project.properties 562B
AndroidManifest.xml 889B
共 84 条
- 1
ld静默
- 粉丝: 1
- 资源: 26
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页