Android ImageView:图片缩放旋转实现详解
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应用中丰富的图片展示效果,包括放大、缩小和旋转。这些功能对于提升用户体验和满足多样化的设计需求至关重要。
236 浏览量
147 浏览量
108 浏览量
2021-12-04 上传
2022-07-04 上传
2022-07-10 上传
363 浏览量
weixin_38748580
- 粉丝: 6
- 资源: 941