4 图像显示部位的修改
当触摸中间位置ImageView控件的某个位置时,下部位置的ImageView控件会显示该位置的局部放大图。通过为中间位置ImageView控件添加触摸事件监听器来实现上述功能。
4.1 触摸事件监听器
通过setOnTouchListener()设置ImageView控件的监听器。该方法的格式是
public void setOnTouchListener (View.OnTouchListener l)
其中参数l是View.OnTouchListener接口的对象。在程序中重载该接口的onTouch()方法,当触摸事件发生时,会调用该方法。onTouch()方法的格式是
boolean onTouch(View v,MotionEvent event)
其中,参数v表示发生触摸事件的视图;event包含了整个触摸事件的信息,可以通过该信息获取触摸的位置。重载的代码如下
image_total.setOnTouchListener(new OnTouchListener()
{
@Override
publicboolean onTouch(View view, MotionEventevent)
{
}
}
4.2 ImageView控件显示视图的获取
要处理ImageView控件显示视图,必须要先获取位图。获取位图的方法是首先获取控件对应的BitmapDrawable,接下来通过BitmapDrawable获取Bitmap。1BitmapDrawable bitmapDrawable = (BitmapDrawable)image_total.getDrawable();
2 Bitmap bitmap =bitmapDrawable.getBitmap();
第1行的作用是获取ImageView控件对应的BitmapDrawable;第2行的作用是通过BitmapDrawable获取Bitmap。
4.3 触摸点坐标的获取及设置
通过onTouch()的参数MotionEvent类型event来获取触摸点的坐标。
int x = (int)event.getX();
int y = (int)event.getY();
其中,getX()获取到的是触摸点的横坐标,getY()获取到的是触摸点的纵坐标。由于这两个方法获取到的坐标都是float类型,所以需要将其转换为int类型。
将该触摸点作为在下部ImageView控件显示的起点,下部ImageView控件的宽度和高度都是120个像素,因此需要对显示的终点进行判断:
1 if(x+120 > bitmap.getWidth())
2 {
3 x= bitmap.getWidth()-120;
4 }
5 if(y+120 > bitmap.getHeight())
6 {
7 y= bitmap.getHeight() - 120;
8 }
其中,1-4行的代码含义是,以x作为起点,如果显示120个像素的宽度超出了指定图像的宽度时,将x向后移动保证其能够正好显示指定图像的宽度;第5-8行的作用是保证以y作为起点,能够正好显示指定图像的高度。
4.4 显示图像
通过ImageView控件的setImageBitmap()方法在下部的ImageView控件中显示指定图像的局部。setImageBitmap()方法的格式是
setImageBitmap(Bitmap bm)
其中,bm是要显示的图像。以下代码用来在下部的ImageView控件中显示图像
1 image_part.setImageBitmap(
2 Bitmap.createBitmap(bitmap, x, y,120, 120)
3 );
其中,image_part是下部的ImageView控件对应的变量;该函数的参数是通过Bitmap类的静态方法createBitmap()创建的位图。createBitmap()方法的格式为
public static Bitmap createBitmap (Bitmap source,int x, int y, int width, int height)
其中,source表示要显示的图像;x和y表示要显示图像起点的横坐标和纵坐标;width和height表示要显示图像的宽度和高度。
在代码中,第2行的createBitmap()方法的bitmap参数是在4.2获取到的在中间ImageView控件中显示的图像;x和y是在4.3中设置的起点横坐标和纵坐标;120是下部ImageView控件的宽度和高度。
5 小结
今天学习了ImageView控件切换显示图像、设置图像透明度以及显示局部的方法。通过setImageBitmap()方法可以快速没有停顿地将图像在控件中显示;通过setAlpha()方法设置图像的透明度;通过为ImageView控件添加触摸事件监听器的方法实现位图的局部显示。