Android 如何制作车轮捡拾器
我正在尝试制作一个轮子选择器,就像我尝试下载这个项目一样,但是.zip下载中包含的唯一文件是wheel-demo.apk和notes.txt。Notes.txt没有关于如何在android studio中使用此文件的任何说明。我发现一篇帖子建议使用ListView来创建相同的效果。我没有自己做,而是花了一天的时间在互联网上搜索,找到了源代码,但当我将这些文件导入到我的项目中时,IDE显示了几十个错误。通过反复试验,我成功地修复了除3个错误以外的所有错误。非常确定我已将相关代码放在下面Android 如何制作车轮捡拾器,android,android-layout,Android,Android Layout,我正在尝试制作一个轮子选择器,就像我尝试下载这个项目一样,但是.zip下载中包含的唯一文件是wheel-demo.apk和notes.txt。Notes.txt没有关于如何在android studio中使用此文件的任何说明。我发现一篇帖子建议使用ListView来创建相同的效果。我没有自己做,而是花了一天的时间在互联网上搜索,找到了源代码,但当我将这些文件导入到我的项目中时,IDE显示了几十个错误。通过反复试验,我成功地修复了除3个错误以外的所有错误。非常确定我已将相关代码放在下面 MainA
MainActivity.java:
OnWheelScrollListener scrolledListener = new OnWheelScrollListener()
{
public void onScrollingStarted(WheelView wheel)
{
wheelScrolled = true;// "Cannot resolve symbol wheelScrolled
}
public void onScrollingFinished(WheelView wheel)
{
wheelScrolled = false;// "Cannot resolve symbol wheelScrolled
updateStatus();
}
};
// Wheel changed listener
private final OnWheelChangedListener changedListener = new OnWheelChangedListener()
{
public void onChanged(WheelView wheel, int oldValue, int newValue)
{
if (!wheelScrolled)// "Cannot resolve symbol wheelScrolled
{
updateStatus();
}
}
};
private void initWheel1(int id)
{
WheelView wheel = (WheelView) findViewById(id);
wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu1)); //cannot resolve method 'setAdapter(com.projectname.ArrayWheelAdapter<Java.lang.String>)
wheel.setVisibleItems(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
OnWheelChangedListener.java:
public interface OnWheelChangedListener {
/**
* Callback method to be invoked when current item changed
* @param wheel the wheel view whose state has changed
* @param oldValue the old value of current item
* @param newValue the new value of current item
*/
void onChanged(WheelView wheel, int oldValue, int newValue);
}
ArrayWheelAdapter.java
public class ArrayWheelAdapter<T> extends AbstractWheelTextAdapter {
// items
private T items[];
/**
* Constructor
* @param context the current context
* @param items the items
*/
public ArrayWheelAdapter(Context context, T items[]) {
super(context);
//setEmptyItemResource(TEXT_VIEW_ITEM_RESOURCE);
this.items = items;
}
@Override
public CharSequence getItemText(int index) {
if (index >= 0 && index < items.length) {
T item = items[index];
if (item instanceof CharSequence) {
return (CharSequence) item;
}
return item.toString();
}
return null;
}
@Override
public int getItemsCount() {
return items.length;
}
}
公共类ArrayHeelAdapter扩展了AbstractWheelTextAdapter{
//项目
私人T项目【】;
/**
*建造师
*@param context当前上下文
*@param items这些项目
*/
公共数组heeladapter(上下文,T项[]){
超级(上下文);
//setEmptyItemResource(文本\视图\项目\资源);
这个项目=项目;
}
@凌驾
公共字符序列getItemText(int索引){
如果(索引>=0&&index
所有3个.java文件都已添加到MainActivity中的导入列表中,认为这可能解决问题,但实际上没有。
谢谢你到目前为止的建议 试试这个
public class MainActivity extends Activity
{
// TODO: Externalize string-array
String wheelMenu1[] = new String[]{"name 1", "name 2", "name 3", "name 4", "name 5", "name 6","name 7","name 8","name 9"};
String wheelMenu2[] = new String[]{"age 1", "age 2", "age 3"};
String wheelMenu3[] = new String[]{"10", "20","30","40","50","60"};
// Wheel scrolled flag
private boolean wheelScrolled = false;
private TextView text;
private EditText text1;
private EditText text2;
private EditText text3;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initWheel1(R.id.p1);
initWheel2(R.id.p2);
initWheel3(R.id.p3);
text1 = (EditText) this.findViewById(R.id.r1);
text2 = (EditText) this.findViewById(R.id.r2);
text3 = (EditText) this.findViewById(R.id.r3);
text = (TextView) this.findViewById(R.id.result);
}
// Wheel scrolled listener
OnWheelScrollListener scrolledListener = new OnWheelScrollListener()
{
public void onScrollStarts(WheelView wheel)
{
wheelScrolled = true;
}
public void onScrollEnds(WheelView wheel)
{
wheelScrolled = false;
updateStatus();
}
};
// Wheel changed listener
private final OnWheelChangedListener changedListener = new OnWheelChangedListener()
{
public void onChanged(WheelView wheel, int oldValue, int newValue)
{
if (!wheelScrolled)
{
updateStatus();
}
}
};
/**
* Updates entered PIN status
*/
private void updateStatus()
{
text1.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()]);
text2.setText(wheelMenu2[getWheel(R.id.p2).getCurrentItem()]);
text3.setText(wheelMenu3[getWheel(R.id.p3).getCurrentItem()]);
text.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()] + " - " + wheelMenu2[getWheel(R.id.p2).getCurrentItem()] + " - " + wheelMenu3[getWheel(R.id.p3).getCurrentItem()]);
}
/**
* Initializes wheel
*
* @param id
* the wheel widget Id
*/
private void initWheel1(int id)
{
WheelView wheel = (WheelView) findViewById(id);
wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu1));
wheel.setVisibleItems(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
private void initWheel2(int id)
{
WheelView wheel = (WheelView) findViewById(id);
wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu2));
wheel.setVisibleItems(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
private void initWheel3(int id)
{
WheelView wheel = (WheelView) findViewById(id);
wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu3));
wheel.setVisibleItems(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
/**
* Returns wheel by Id
*
* @param id
* the wheel Id
* @return the wheel with passed Id
*/
private WheelView getWheel(int id)
{
return (WheelView) findViewById(id);
}
/**
* Tests wheel value
*
* @param id
* the wheel Id
* @param value
* the value to test
* @return true if wheel value is equal to passed value
*/
private int getWheelValue(int id)
{
return getWheel(id).getCurrentItem();
}
}
公共类MainActivity扩展活动
{
//TODO:外部化字符串数组
字符串wheelMenu1[]=新字符串[]{“名称1”、“名称2”、“名称3”、“名称4”、“名称5”、“名称6”、“名称7”、“名称8”、“名称9”};
字符串wheelMenu2[]=新字符串[]{“年龄1”、“年龄2”、“年龄3”};
字符串wheelMenu3[]=新字符串[]{“10”、“20”、“30”、“40”、“50”、“60”};
//车轮滚动标志
私有布尔wheelScrolled=false;
私有文本查看文本;
私人编辑文本1;
私人编辑文本文本2;
私人编辑文本文本3;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
初始轮1(R.id.p1);
初始轮2(R.id.p2);
初始轮3(R.id.p3);
text1=(EditText)this.findViewById(R.id.r1);
text2=(EditText)this.findViewById(R.id.r2);
text3=(EditText)this.findViewById(R.id.r3);
text=(TextView)this.findViewById(R.id.result);
}
//滚轮式侦听器
OnWheelScrollListener scrolledListener=新建OnWheelScrollListener()
{
CROWLLSTARTS上的公共无效(车轮视图车轮)
{
wheelScrolled=true;
}
十字轴上的公共空隙(车轮视图车轮)
{
wheelScrolled=false;
更新状态();
}
};
//轮换监听器
私有最终OnWheelChangedListener changedListener=新OnWheelChangedListener()
{
更改后的公共无效(WheelView控制盘、int-oldValue、int-newValue)
{
如果(!已滚动)
{
更新状态();
}
}
};
/**
*更新输入的PIN状态
*/
私有void updateStatus()
{
text1.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem());
text2.setText(wheelMenu2[getWheel(R.id.p2).getCurrentItem()]);
text3.setText(wheelMenu3[getWheel(R.id.p3).getCurrentItem()]);
text.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()]+“-”+wheelMenu2[getWheel(R.id.p2).getCurrentItem()]+“-”+wheelMenu3[getWheel(R.id.p3).getCurrentItem());
}
/**
*初始化控制盘
*
*@param-id
*控制盘小部件Id
*/
私有void initWheel1(内部id)
{
WheelView车轮=(WheelView)findViewById(id);
车轮设置适配器(新阵列车轮适配器(车轮菜单1));
车轮。设置可见项目(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
私有无效初始化2(内部id)
{
WheelView车轮=(WheelView)findViewById(id);
车轮设置适配器(新阵列车轮适配器(车轮菜单2));
车轮。设置可见项目(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
私有void initWheel3(内部id)
{
WheelView车轮=(WheelView)findViewById(id);
wheel.setAdapter(新阵列WheelLadapter(wheelMenu3));
车轮。设置可见项目(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
/**
*按Id返回控制盘
*
*@param-id
*车轮Id
*@返回已通过Id的车轮
*/
私人WheelView getWheel(内部id)
{
返回(WheelView)findViewById(id);
}
/**
*测试wh
public class MainActivity extends Activity
{
// TODO: Externalize string-array
String wheelMenu1[] = new String[]{"name 1", "name 2", "name 3", "name 4", "name 5", "name 6","name 7","name 8","name 9"};
String wheelMenu2[] = new String[]{"age 1", "age 2", "age 3"};
String wheelMenu3[] = new String[]{"10", "20","30","40","50","60"};
// Wheel scrolled flag
private boolean wheelScrolled = false;
private TextView text;
private EditText text1;
private EditText text2;
private EditText text3;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initWheel1(R.id.p1);
initWheel2(R.id.p2);
initWheel3(R.id.p3);
text1 = (EditText) this.findViewById(R.id.r1);
text2 = (EditText) this.findViewById(R.id.r2);
text3 = (EditText) this.findViewById(R.id.r3);
text = (TextView) this.findViewById(R.id.result);
}
// Wheel scrolled listener
OnWheelScrollListener scrolledListener = new OnWheelScrollListener()
{
public void onScrollStarts(WheelView wheel)
{
wheelScrolled = true;
}
public void onScrollEnds(WheelView wheel)
{
wheelScrolled = false;
updateStatus();
}
};
// Wheel changed listener
private final OnWheelChangedListener changedListener = new OnWheelChangedListener()
{
public void onChanged(WheelView wheel, int oldValue, int newValue)
{
if (!wheelScrolled)
{
updateStatus();
}
}
};
/**
* Updates entered PIN status
*/
private void updateStatus()
{
text1.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()]);
text2.setText(wheelMenu2[getWheel(R.id.p2).getCurrentItem()]);
text3.setText(wheelMenu3[getWheel(R.id.p3).getCurrentItem()]);
text.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()] + " - " + wheelMenu2[getWheel(R.id.p2).getCurrentItem()] + " - " + wheelMenu3[getWheel(R.id.p3).getCurrentItem()]);
}
/**
* Initializes wheel
*
* @param id
* the wheel widget Id
*/
private void initWheel1(int id)
{
WheelView wheel = (WheelView) findViewById(id);
wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu1));
wheel.setVisibleItems(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
private void initWheel2(int id)
{
WheelView wheel = (WheelView) findViewById(id);
wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu2));
wheel.setVisibleItems(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
private void initWheel3(int id)
{
WheelView wheel = (WheelView) findViewById(id);
wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu3));
wheel.setVisibleItems(2);
wheel.setCurrentItem(0);
wheel.addChangingListener(changedListener);
wheel.addScrollingListener(scrolledListener);
}
/**
* Returns wheel by Id
*
* @param id
* the wheel Id
* @return the wheel with passed Id
*/
private WheelView getWheel(int id)
{
return (WheelView) findViewById(id);
}
/**
* Tests wheel value
*
* @param id
* the wheel Id
* @param value
* the value to test
* @return true if wheel value is equal to passed value
*/
private int getWheelValue(int id)
{
return getWheel(id).getCurrentItem();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/layout_bg">
<LinearLayout
android:layout_marginTop="24dp"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.example.wheel.WheelView
android:id="@+id/p1"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
<com.example.wheel.WheelView
android:id="@+id/p2"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
<com.example.wheel.WheelView
android:id="@+id/p3"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp">
<EditText
android:id="@+id/r1"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_gravity="center_horizontal"
android:textSize="18sp"
android:textColor="#000">
</EditText>
<EditText
android:id="@+id/r2"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_gravity="center_horizontal"
android:textSize="18sp"
android:textColor="#000">
</EditText>
<EditText
android:id="@+id/r3"
android:layout_width="80dip"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_gravity="center_horizontal"
android:textSize="18sp"
android:textColor="#000">
</EditText>
</LinearLayout>
<TextView
android:id="@+id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_gravity="center_horizontal"
android:textSize="18sp"
android:textColor="#FFF"
android:text="Your choice">
</TextView>
</LinearLayout>
<NumberPicker
android:id="@+id/number_picker"
android:layout_width="match_parent"
android:layout_height="180dp" />
String[] data = new String[]{"Berlin", "Moscow", "Tokyo", "Paris"};
picker.setMinValue(0);
picker.setMaxValue(data.length-1);
picker.setDisplayedValues(data);