0%

Android进度条和图像控件

进度条控件

这个相对比较简单,常用的就是开始拖动,停止拖动,进度改变这三个监听器。

1
2
3
4
5
6
7
8
9
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="71dp"
android:progress="60"
android:secondaryProgress="80" />
  1. progress是显示的进度
  2. secondaryProgress是二层显示的一个进度,颜色是虚的

常用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
	Sb_One.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

//停止拖动
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
Log.d("SeekBar_Stop", "Stop");
}

//开始拖动
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Log.d("SeekBar_Start", "Start");
}

//进度值改变
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.d("SeekBar_Progress", progress+"");
}
});
}

图像控件

就是显示图片的一个东西,但因为是显示图片,所以他的属性有点多,而且有点乱,感觉就是用到的时候在去查询就可以了。

常见属性

1
2
3
4
5
6
7
8
9
10
11
12
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/seekBar1"
android:layout_below="@+id/seekBar1"
android:layout_marginTop="29dp"
android:background="@android:color/darker_gray"
android:maxHeight="300dp"
android:maxWidth="300dp"
android:src="@drawable/ic_launcher"
android:adjustViewBounds="true"
/>
  1. adjustViewBounds:这个看名字就知道就是一个是否自动调整和图像一样,这个是和maxHeight与maxWidth一起才有效果的,也是必须和他们一起。
  2. android:scaleType="fitXY"这个上面XML没写,但是也是比较常用,有下面几个值可以供我们选择:
作用
fitXY 拉伸图片(不按比例)以填充View的宽高
fitStart 按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的左边
fitCenter 按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的中间
fitEnd 按比例拉伸图片,拉伸后图片的高度为View的高度,且显示在View的右边
center 按原图大小显示图片,但图片宽高大于View的宽高时,截图图片中间部分显示
centerCrop 按比例放大原图直至等于某边View的宽高显示。
centerInside 当原图宽高或等于View的宽高时,按原图大小居中显示;反之将原图缩放至View的宽高居中显示。

这个东西就是这么看看用到的时候进行选择就可以了。但是需要注意的是使用scaleType这个属性我们宽高不要设置为:wrap_content包裹内容,否则看不出效果。

缩放与旋转

我们通过进度条进行实现,这个东西用到了一个矩阵类,这个类呢,我也没怎么研究过,但是使用起来就是用到他一个设置轮值的方法,也就是旋转度的一个方法。
首先我们先配置XML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<SeekBar
android:id="@+id/seekBar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView1"
android:layout_centerHorizontal="true"
android:progress="60"
android:secondaryProgress="80" />

<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/seekBar2"
android:layout_centerHorizontal="true"
android:progress="60"
android:secondaryProgress="80" />

<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="300dip"
android:layout_alignLeft="@+id/seekBar2"
android:layout_alignParentTop="true"
android:layout_marginTop="19dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_launcher" />

(在写这个博客的时候解决了一个问题啊哈哈哈!本来还想之后再补上)

先设置那个进度条的大小:

1
2
3
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);//获取屏幕属性
Sb_One.setMax(dm.widthPixels);

设置完进度条之后,我么来编写放大缩小。

1
2
3
4
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
im_One.setLayoutParams(new RelativeLayout.LayoutParams(progress,progress*3/4));
}

一些累赘的代码我就没copy上去,单子啊这里需要注意要用到我们当前布局下面的LayoutParams生成的类才可以。
旋转的实现我们先new一个矩阵类:

1
2
3
private Matrix ma;
/*...*/
ma = new Matrix();

之后我们再在第二个的拖动事件里面写:

1
2
3
4
5
6
7
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
ma.setRotate(progress);
Bitmap bit = ((BitmapDrawable)getResources().getDrawable(R.drawable.ic_launcher)).getBitmap();
bit = Bitmap.createBitmap(bit,0,0,bit.getWidth(),bit.getHeight(),ma,true);
im_One.setImageBitmap(bit);
}

首先显示设置轮值,然后再获取我们的Bitmap对象,然后创建一幅新的位图,矩阵信息用我们设置过轮值的,然后再设置图片就好了。
效果图