Android ImageView 操作:缩放与旋转实现代码
198 浏览量
更新于2024-08-29
收藏 205KB PDF 举报
"Android中imageView图片放大缩小及旋转功能示例代码"
在Android开发中,对ImageView的图片进行放大、缩小和旋转是常见的需求。本文将详细介绍如何实现这些功能,并提供相应的示例代码。
一、简介
在Android应用中,我们经常需要对显示的图像进行动态操作,比如用户可以通过手势或滑动条来改变图片的大小和角度。通过调整ImageView的属性和利用Bitmap的相关方法,我们可以轻松实现这些功能。
二、方法
1)设置图片放大缩小效果
要实现图片的放大缩小,我们首先需要设置ImageView的`scaleType`属性。`fitCenter`模式会保持图片的原始比例,并将其居中显示。接着,我们需要获取屏幕的宽度,这可以通过`DisplayMetrics`类的`widthPixels`属性得到。然后,我们可以使用SeekBar来控制图片的缩放比例,将SeekBar的最大进度设置为屏幕宽度。最后,根据SeekBar的当前进度值动态调整ImageView的布局参数,即宽度和高度,以实现图片的缩放。
```java
// 设置ImageView的scaleType
<ImageView
android:id="@+id/iv_pic"
android:scaleType="fitCenter" />
// 获取屏幕宽度
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels;
// 设置SeekBar的最大进度
SeekBar sb_one = findViewById(R.id.sb_one);
sb_one.setMax(screenWidth);
// SeekBar改变时,更新ImageView的宽度和高度
sb_one.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int width = progress;
int height = (int) (progress * 3 / 4);
iv_pic.setLayoutParams(new LinearLayout.LayoutParams(width, height));
}
});
```
2)设置图片旋转方法
图片旋转则需要使用`Matrix`类来设置旋转角度。首先创建一个Matrix对象,然后设置旋转角度。接下来,获取到Bitmap资源,通过Matrix重新构建一个新的Bitmap,最后将新构建的Bitmap设置给ImageView。
```java
// 初始化Matrix
Matrix matrix = new Matrix();
// 设置旋转角度
matrix.setRotate((int) (progress * 3.60));
// 获取Bitmap资源
BitmapDrawable bitmapDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.image1);
Bitmap bitmap = bitmapDrawable.getBitmap();
// 重建Bitmap
Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
// 设置给ImageView
iv_pic.setImageBitmap(newBitmap);
```
三、代码实例
以下是完整的Activity示例代码:
```java
public class Activity02 extends AppCompatActivity {
ImageView iv_pic;
SeekBar sb_one;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_02);
iv_pic = findViewById(R.id.iv_pic);
sb_one = findViewById(R.id.sb_one);
// 设置ImageView的scaleType
iv_pic.setScaleType(ImageView.ScaleType.FIT_CENTER);
// 设置SeekBar最大进度
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
sb_one.setMax(dm.widthPixels);
// SeekBar改变时,更新ImageView的大小
sb_one.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int width = progress;
int height = (int) (progress * 3 / 4);
ViewGroup.LayoutParams layoutParams = iv_pic.getLayoutParams();
layoutParams.width = width;
layoutParams.height = height;
iv_pic.setLayoutParams(layoutParams);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
// 设置图片旋转
iv_pic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rotateImage();
}
});
}
private void rotateImage() {
Matrix matrix = new Matrix();
matrix.setRotate(90); // 以90度为单位进行旋转,你可以根据需要修改这个值
BitmapDrawable bitmapDrawable = (BitmapDrawable) iv_pic.getDrawable();
Bitmap bitmap = bitmapDrawable.getBitmap();
Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
iv_pic.setImageBitmap(newBitmap);
}
}
```
这段代码实现了图片的放大缩小(通过SeekBar)和点击图片时的旋转功能。请注意,实际项目中可能需要考虑更复杂的用户交互和性能优化,例如使用GestureDetector处理手势操作,或者在后台线程中进行Bitmap的处理以避免UI卡顿。
总结,Android中的ImageView结合Bitmap和Matrix可以实现丰富的图片操作。通过理解这些基础知识,开发者可以创建出更具有交互性的图片展示功能,提升用户体验。
2015-11-26 上传
2016-05-29 上传
2021-03-16 上传
2019-08-02 上传
2021-12-04 上传
2022-07-04 上传
2022-07-10 上传
点击了解资源详情
weixin_38742647
- 粉丝: 25
- 资源: 932
最新资源
- Cpp-programmimg
- 风管局部阻力计算.zip
- @1 Quote Publisher-开源
- bash-hockey-puck::no_entry:不再维护。 见->
- je-analysis-1.5.3、lucene-core-2.4.1分词组件
- microservice-posts:Microservice em Typescript
- 响应式豪华汽车爱好者个人博客网站静态模板.zip
- java实现医院管理住院系统.rar
- mysql代码-FlightDB
- CASA分配
- @1 Event Publisher-开源
- PBL-Compiladores-2021.1-1
- theme-juice-functions:主题果汁助手功能库
- theme-aurora
- 实用五金计算软件.zip
- dockerfiles:dockerfile的集合