【Android开发】高级组件-拖动条和星级评分条

  1. 云栖社区>
  2. 博客>
  3. 正文

【Android开发】高级组件-拖动条和星级评分条

光仔december 2015-04-06 18:27:00 浏览2151
展开阅读全文
在Android中,提供了两种允许用户通过拖动来改变进度的组件,分别是拖动条(SeekBar)和星级评分条(RatingBar),下面分别进行介绍

1.拖动条
拖动条与进度条相似,所不同的是,拖动条允许用户拖动滑块来改变值,通常用于实现对某种数值的调节。例如,调节图片的透明度或者音量。

在XML布局文件中的语法格式:
<SeekBar
    android:layout_height="warp_content"
    android:id="@+id/seekBar1"
    android:max="100"
    android:progress="50"
    android:layout_width="warp_content">
</SeekBar>

由于拖动条可以被用户控制,所以需要为其添加OnSeekBarChangeListener监听器。

下面用实例说明用法:

效果图:


具体实现代码:
res/layout/main.xml:(默认拖动条的进度是50,最大进度是100)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical"
	android:background="#000000">
	<TextView android:text="当前值:50"
	    android:id="@+id/textView1"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"/>
	<!-- 拖动条 -->
	<SeekBar android:id="@+id/seekBar1"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:padding="10px"
	    android:max="100"
	    android:progress="50"/>
</LinearLayout>

MainActivity:
package com.example.test;


import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.Toast;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;


public class MainActivity extends Activity {
     private SeekBar seekbar;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		final TextView result=(TextView)findViewById(R.id.textView1);
		seekbar=(SeekBar)findViewById(R.id.seekBar1);
		seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			
			//当用户结束滑动拖动条的时候执行的方法
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				Toast.makeText(MainActivity.this,"结束滑动", Toast.LENGTH_SHORT).show();
			}
			
			//当用户开始滑动拖动条的时候执行的方法
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
				Toast.makeText(MainActivity.this,"开始滑动", Toast.LENGTH_SHORT).show();
			}
			
			//当用户正在滑动拖动条的时候执行的方法(参数progress就是目前拖动条的进度)
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
				result.setText("当前值:"+progress);
			}
		});
	}
}
实现效果:用户刚用手触碰上去正准备开始拖动,显示"开始滑动"提示,拖动过程"当前值:"在随着拖动进度变化,手指停止拖动时,显示"结束滑动"。


2.星级评分条
星级评分条与拖动条类似,都允许用户拖动来改变进度,所不同的是,星级评分条通过星星图案表示进度。通常情况下星级评分条表示对某一事物的支持度或对某种服务的满意度等。例如,淘宝中对卖家的好评度,就是通过星级评分条实现的。

在XML布局文件中的语法格式:
<RatingBar
    属性列表
>
</RatingBar>

支持的XML属性:
android:isIndicator 用于指定该星级评分条是否允许用户该表,true为不允许改变
android:numStars 用于指定该星级评分条总共有多少个星
android:rating  用于指定该星级评分条默认的星级
android:stepSize  用于指定每次最少需要改变多少个星级,默认为0.5个

除了上面的属性以外,星级评分条还提供了一下3个比较常用的方法:
getRating()方法,获取等级,表示选中了几颗星
getStepSize()方法,用于获取每次至少改变多少个星级
getProgress()方法,用于获取进度,获取到的进度值为getRating()方法返回值除以getStepSize()方法返回的值。

下面通过一个具体实例说明星级评分条的应用:
效果如图:

res/layout/main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical"
	android:background="#000000">
	<!-- 星级评分条 -->
	<RatingBar android:id="@+id/ratingBar1"
	    android:numStars="5"
	    android:rating="3.5"
	    android:isIndicator="true"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"/>
	<!-- 按钮 -->
	<Button android:text="提交"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:id="@+id/button1"/>
</LinearLayout>

MainActivity:

package com.example.test;


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.Toast;


public class MainActivity extends Activity {
	private RatingBar ratingBar;//星级评分条
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		ratingBar=(RatingBar)findViewById(R.id.ratingBar1);//获取星级评分条
		Button button=(Button)findViewById(R.id.button1);//获取“提交”按钮
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				int result=ratingBar.getProgress();//获取进度
				float rating=ratingBar.getRating();//获取等级
				float step=ratingBar.getStepSize();//获取每次最少要改变多少星级
				Log.i("星级评分条", "step="+step+" result="+result+" rating="+rating);
				Toast.makeText(MainActivity.this, "你得到了"+rating+"颗星",Toast.LENGTH_SHORT).show();
			}
		});
	}
}

点击按钮之后控制台输出的信息如图:


转载请注明出处:http://blog.csdn.net/acmman/article/details/44904123

网友评论

登录后评论
0/500
评论
光仔december
+ 关注