参考自《疯狂android讲义》2.4节

效果如下:


当点击图上某点时,将之附近放大至下图。

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <Button            android:id="@+id/bt_plus_alpha"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/plus_alpha"            android:textSize="12sp" />        <Button            android:id="@+id/bt_minus_alpha"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/minus_alpha"            android:textSize="12sp" />        <Button            android:id="@+id/bt_next"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/next_picture"            android:textSize="12sp" />    </LinearLayout>        <ImageView        android:id="@+id/iv_full_pic"        android:layout_width="match_parent"        android:layout_height="0sp"        android:layout_weight="3"        android:src="@drawable/shuangta"        android:contentDescription="@string/big_image"/>        <ImageView        android:id="@+id/iv_zoom_pic"        android:layout_width="match_parent"        android:layout_height="0sp"        android:layout_weight="1"        android:src="@drawable/shuangta"        android:contentDescription="@string/small_image"/>    </LinearLayout>


类文件:

package com.ljh.imageviewdemo;import com.example.imageviewdemo.R;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.ImageView;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.drawable.BitmapDrawable;public class MainActivity extends Activity {private float alpha = 1.0f;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final ImageView ivFullPic = (ImageView) findViewById(R.id.iv_full_pic);final ImageView ivZoomPic = (ImageView) findViewById(R.id.iv_zoom_pic);final Button btIncreaseAlpha = (Button) findViewById(R.id.bt_plus_alpha);final Button btDecreaseAlpha = (Button) findViewById(R.id.bt_minus_alpha);final Button btNextPic = (Button) findViewById(R.id.bt_next);final int[] images = new int[] { R.drawable.lijiang, R.drawable.qiao,R.drawable.shuangta, R.drawable.shui, R.drawable.xiangbi };btNextPic.setOnClickListener(new OnClickListener() {private int currentImage = 2;@Overridepublic void onClick(View v) {currentImage++;ivFullPic.setImageResource(images[currentImage % images.length]);}});btIncreaseAlpha.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (alpha > 1) {//在API11以后,建议使用setAlpha(float),而setAlpha(int) 已经 deprecated。前者取值范围0~1,后者取值范围0~255.ivFullPic.setAlpha(1.0f);} elseivFullPic.setAlpha(alpha += 0.01);}});btDecreaseAlpha.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (alpha < 0) {ivFullPic.setAlpha(0.0f);} elseivFullPic.setAlpha(alpha -= 0.01);}});ivFullPic.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View view, MotionEvent event){BitmapDrawable bitmapDrawable = (BitmapDrawable) ivFullPic.getDrawable();// 获取第一个图片显示框中的位图Bitmap bitmap = bitmapDrawable.getBitmap();// bitmap图片实际大小与第一个ImageView的缩放比例double scale = bitmap.getWidth() / 480.0;// 获取需要显示的图片的开始点int x = (int) (event.getX() * scale);int y = (int) (event.getY() * scale);if (x + 120 > bitmap.getWidth()){x = bitmap.getWidth() - 120;}if (y + 120 > bitmap.getHeight()){y = bitmap.getHeight() - 120;}// 显示图片的指定区域ivZoomPic.setImageBitmap(Bitmap.createBitmap(bitmap, x, y, 120, 120));ivZoomPic.setAlpha(alpha);return false;}});}}


几个知识点:

1、根据比例调整图像大小

android:layout_height="0sp"
android:layout_weight="3"

android:layout_height="0sp"
android:layout_weight="1"


2、注意典型的用匿名内部类作监听器的做法。

3、setAlpha(float)与setAlpha(int)的区别。

4、setImageResource(int)



更多相关文章

  1. android Immutable bitmap passed to Canvas const...
  2. Android中多图片选择器PhotoPicker库的使用(仿微信)
  3. android 实现ImageView按压效果和解决背景图片拉申问题
  4. Button 有按下效果
  5. 像素和dip之间的相互转换
  6. Android(安卓)调用用相机拍照保存在本地,imageview根据路径读取图
  7. Android的六边形图片
  8. Android(安卓)图片加载导致内存占用过大的问题
  9. Android(安卓)之多点触摸 手势拉伸放大缩小图片 并在ImageView上

随机推荐

  1. Android中解析JSON形式的数据
  2. 在Android中启动执行java程序
  3. Android(安卓)Studio技巧 --新学的几个快
  4. DialogDemo
  5. Missing contentDescription attribute o
  6. context.obtainStyledAttributes 研究
  7. Android之activity跳转并且回调
  8. PopupWindow 展开后点击返回键无效?
  9. Android学习博客链接
  10. android 命令行 sqlite3 not found 解决