自述
一开始看到的是毫无例外的废话部分,可自行跳过,首先,我想说的是,如果你之前学习过Android开发,那么下面我写的代码应该可以看懂,如果你是刚要学习Android,那么你可以先去搜一下其他的文章,我这篇只是讲了一个UI控件而已,并不能教你如何学安卓开发,也许以后我会写那种文章,但至少这篇帮不到你,抱歉。好了,现在假设你跟我一样,学过一点点Android,但是又不是很了解,至少要了解目录结构,然后我们就可以开始了。
正文——拖动条
我用的开发工具是Android Studio
实例
先看一个实例吧,我觉得直接看例子比较实在。有兴趣的朋友可以复制我的代码,去粘到相应文件里面,运行一下试试看,详细的代码可以去我的GitHub上拷贝,这里是我的GitHub地址
项目结构
这里先说一下我的项目结构吧,因为项目里面被我集成了好多控件用来练习,所以怕初学者弄混,以前我看别人的代码的时候经常会因为不知道往哪个文件写代码而停滞不前,所以我决定尽量写详细一点,希望可以帮得到你。
图中被圈出来的都是跟此次实例相关的文件,
具体代码参考
MainActivity.java文件是主程序入口,被我用按钮的形式,当做菜单,来选择进入各个控件练习页面了,这里就不详细介绍了,只列出MainActivity中部分有关代码
private Button btnSeekBar;//拖动条
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
/**
* 初始化函数,获取控件id,并给按钮添加监听
*/
private void init() {
//获取activity_main.xml文件中有一个id叫btn_seek_bar的按钮,你也可以取其他id名,这里跟xml中的id对应上就行。
btnSeekBar = (Button) findViewById(R.id.btn_seek_bar);
btnSeekBar.setOnClickListener(new onClickBtn());
}
/**
* 处理监听事件
*/
class onClickBtn implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_seek_bar:
openAct(SeekBarActivity.class);//跳转到SeekBarActivity页面
break;
//……其他页面
}
}
}
openAct()方法是我自定义的一个方法,因为后期调用Intent对象会很频繁,又因为我懒,所以写了个调用方法,
/**
* 打开一个activity页面,不传递数据
*
* @param actClass 传入要跳转的activity
*/
public void openAct(Class<?> actClass) {
Intent intent = new Intent(this, actClass);
startActivity(intent);
}
接下来先在layout布局文件里面新建一个名叫activity_seek_bar.xml的文件,里面填入以下代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:max="100"
android:progress="50"
android:padding="10dp"/>
<TextView
android:id="@+id/seekBar_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/seekBar_text"
android:padding="20dp"/>
</LinearLayout>
android:max | 设置拖动条的最大值 |
android:progress | 设置当前值 |
然后在java文件夹中的项目包里新建一个名叫SeekBarActivity的class文件,代码如下
public class SeekBarActivity extends Activity {
private SeekBar seekBar;
private TextView tv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seek_bar);
init();
}
private void init() {
seekBar = (SeekBar) findViewById(R.id.seekBar);
tv = (TextView) findViewById(R.id.seekBar_tv);
//添加事件监听
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 当进度条改变时,改变文本框的显示内容
tv.setText("当前值:"+progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Toast.makeText(SeekBarActivity.this,"开始滑动",Toast.LENGTH_SHORT).show();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Toast.makeText(SeekBarActivity.this,"结束滑动",Toast.LENGTH_SHORT).show();
}
});
}
}
OnSeekBarChangeListener() | 可以为拖动条添加监听事件 |
onStartTrackingTouch | 当开始滑动滑块时,会执行该方法下的代码 |
onStopTrackingTouch | 当结束滑动滑块时,会执行该方法下的代码 |
onProgressChanged | 当滑块进度改变时,会执行该方法下的代码 |
具体代码都写完了,这里有必要提一下,细心的朋友可能注意到了,我在布局文件里的text是引用了string文件里的name名,如果你是有一定基础的应该知道,我就详细写一下吧,
在string.xml文件中添加如下代码:
<resources>
……
<string name="btn_seek_bar">拖动条</string>
<string name="seekBar_text">当前值:50</string>
</resources>
然后你就可以用了
哦对了,新建了activity,别忘了去AndroidManifest.xml中添加一下
<application>
……
<activity android:name=".SeekBarActivity"/>
</application>
OK,大功造成。
运行效果
到此程序代码就算完成了,好了看一下运行效果吧,我都有些迫不及待了
滑动改变一下,
OK,是可以的,没有问题,你成功了吗?
结尾
终于写完了,哇,莫名有一点点激动,虽然程序并不复杂,但第一次以这样的形式来写一个程序,想想还是蛮有成就感的,毕竟也是第一次在博客上写代码,这里也谢谢各位朋友的耐心阅读,可能我写的并不是很好,逻辑可能也还有待完善,所以也希望大家有什么意见和建议多对我这个新人提提,我希望能在这里和各位朋友共同成长。
以后会抽时间更新更多的高级控件练习,如果你也有兴趣,欢迎关注我,我们一起学习。