基于Java语言的安卓编程之十三ImageView控件(下)

时间:2022-06-19 00:22:52

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控件添加触摸事件监听器的方法实现位图的局部显示。