#### SeekBar
继承ProgressBar,提供用户改变进度的拖块
xml:
<SeekBar
android:id="@+id/m_seek"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:max="100"
android:progress="30"
android:secondaryProgress="50"/>
java:
private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
//用户停止拖动是触发(手指离开了拖块瞬间)
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.e("m_tag", "onStopTrackingTouch:"+seekBar.getProgress());
}
//用户开始拖动(手指触摸到拖块的瞬间)
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.e("m_tag", "onStartTrackingTouch:"+seekBar.getProgress());
}
//进度发生变化时触发
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
Log.e("m_tag", "onProgressChanged:"+progress+" isFromUser:"+fromUser);
}
};
设置监听
SeekBar seek = (SeekBar) findViewById(R.id.m_seek);
seek.setOnSeekBarChangeListener(mSeekListener);
#### 进度系列控件自定义
进度的自定义
1、在res的drawable下定义layer-list文件,如:progress_drawable.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 背景层 -->
<item
android:id="@android:id/background"
android:drawable="@drawable/bg"/>
<!-- 第二进度层 -->
<item
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/sec_pro"/>
<!-- 第一进度层 -->
<item
android:id="@android:id/progress"
android:drawable="@drawable/pro"/>
</layer-list>
2、设置进度资源
android:progressDrawable="@drawable/progress_drawable"
对于拖动条可以定义selector文件来改变拖块的效果,如定义了thumb_drawable.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/nomal" android:state_pressed="false"/>
<item android:drawable="@drawable/press" android:state_pressed="true"/>
</selector>
替换原有的拖块的效果(SeekBar的属性)
android:thumb="@drawable/thumb_drawable"
#### RatingBar
<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5" 星星数量
android:rating="1.5"/> 默认的分值
可以通过android:isIndicator="true"设置为指示器(用户无法改变值)
java:
RatingBar r = (RatingBar) findViewById(R.id.rating);
r.setRating(2.5f); 设置分值
//r.getRating()获取分值
r.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser) {
Log.e("m_tag", "rating:"+rating);
}
});
#### ImageView
<ImageView
android:layout_width="300dp"
android:layout_height="280dp"
android:background="#ff333333"
android:src="@drawable/pic2"
android:scaleType="centerCrop" />
如果宽高固定,然后图片和ImageView的宽高不成等比,则需要android:scaleType来处理拉伸效果
fitXY表示铺满(按图片四个角拉伸图片)
fitStart从左上角开始等比例拉伸或者缩放去填充ImageView
fitEnd从右下角开始
fitCenter放在中间等比例填充ImageView
centerCrop按ImageView等比例取图片的中间部分填充ImageView
centerInside按图片原始大小显示在ImageView中间
java中操作ImageView
iv = (ImageView) findViewById(R.id.image);
//设置res下的图片
iv.setImageResource(R.drawable.pic1);
也可以通过以下方式设置一个sdcard中的图片:
//URI表示一个数据的源(地址)文件地址 网址 经纬度
File f = new File("/mnt/sdcard/yux.jpg");
Uri uri = Uri.fromFile(f); //文件转为Uri
iv.setImageURI(uri);
注意,程序读取本地文件需要有读sdcard权限
添加方式为:在manifest中的<application>标签外添加如下语句:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>