ImageView一例
16lz
2021-01-25
参考自《疯狂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)
更多相关文章
- android Immutable bitmap passed to Canvas const...
- Android中多图片选择器PhotoPicker库的使用(仿微信)
- android 实现ImageView按压效果和解决背景图片拉申问题
- Button 有按下效果
- 像素和dip之间的相互转换
- Android(安卓)调用用相机拍照保存在本地,imageview根据路径读取图
- Android的六边形图片
- Android(安卓)图片加载导致内存占用过大的问题
- Android(安卓)之多点触摸 手势拉伸放大缩小图片 并在ImageView上