Android ImageView:图片缩放旋转实现详解

1 下载量 53 浏览量 更新于2024-09-02 收藏 198KB PDF 举报
"Android中imageView图片放大缩小及旋转功能示例代码" 在Android开发中,ImageView是展示图片的主要组件。本文将详细介绍如何实现ImageView中的图片放大、缩小和旋转功能,并提供相应的示例代码。 一、简介 在Android应用中,我们常常需要对显示的图片进行操作,比如调整其大小以适应不同的屏幕尺寸,或者根据用户需求旋转图片。ImageView的`scaleType`属性可以用来控制图片的显示方式,而通过Matrix对象和Bitmap的重新构建,我们可以实现图片的动态旋转。 二、方法 1)设置图片放大缩小效果 要实现图片的放大和缩小,首先需要设置ImageView的`scaleType`属性。将其设置为"fitCenter"可以让图片居中显示并按比例缩放以适应ImageView的大小。 ```xml <ImageView android:scaleType="fitCenter" ... /> ``` 接下来,我们需要获取屏幕的宽度,这可以通过DisplayMetrics对象完成: ```java DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.widthPixels; ``` 然后,可以使用SeekBar来控制图片的大小。 SeekBar的最大进度设置为屏幕宽度,每次改变进度时,更新ImageView的布局参数: ```java SeekBar sb_one = findViewById(R.id.sb_one); sb_one.setMax(screenWidth); sb_one.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int width = progress; int height = progress * 3 / 4; // 保持宽高比 iv_pic.setLayoutParams(new LinearLayout.LayoutParams(width, height)); } }); ``` 2)设置图片旋转方法 图片旋转的核心是使用Matrix对象和Bitmap的createBitmap方法。首先,创建一个Matrix对象并设置旋转角度: ```java Matrix matrix = new Matrix(); matrix.setRotate((int) (progress * 3.60)); // 角度可以根据需要调整 ``` 接着,获取Bitmap资源,并利用矩阵进行旋转: ```java BitmapDrawable bitmapDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.image1); Bitmap bitmap = bitmapDrawable.getBitmap(); Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); ``` 最后,将旋转后的Bitmap设置给ImageView: ```java iv_pic.setImageBitmap(newBitmap); ``` 三、代码实例 以下是一个简单的Activity示例,展示了图片放大缩小和旋转的完整代码: ```java public class ImageTransformActivity extends AppCompatActivity { ImageView iv_pic; SeekBar sb_one; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_transform); iv_pic = findViewById(R.id.iv_pic); sb_one = findViewById(R.id.sb_one); // 设置初始值 int width = Resources.getSystem().getDisplayMetrics().widthPixels; int height = width * 3 / 4; iv_pic.setLayoutParams(new LinearLayout.LayoutParams(width, height)); // 设置SeekBar监听 sb_one.setMax(width); sb_one.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { updateImageSizeAndRotation(progress); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); } private void updateImageSizeAndRotation(int progress) { int width = progress; int height = progress * 3 / 4; iv_pic.setLayoutParams(new LinearLayout.LayoutParams(width, height)); Matrix matrix = new Matrix(); matrix.setRotate((int) (progress * 3.60)); BitmapDrawable bitmapDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.image1); Bitmap bitmap = bitmapDrawable.getBitmap(); Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); iv_pic.setImageBitmap(newBitmap); } } ``` 这个示例中,当用户滑动SeekBar时,图片的大小和旋转角度会随之变化。实际应用中,你可以根据具体需求调整代码,例如添加动画效果,或者提供更丰富的交互方式。 通过灵活运用ImageView的`scaleType`属性和Matrix对象,可以实现Android应用中丰富的图片展示效果,包括放大、缩小和旋转。这些功能对于提升用户体验和满足多样化的设计需求至关重要。