android:动态缩放和旋转图像

本文为Android初学者提供了一篇关于如何在Android应用中缩放和旋转图像的学习笔记。通过使用ImageView组件及其android:scaleType属性设置为fitCenter,实现了图像的缩放。同时,利用SeekBar实现图像的旋转功能,通过调整旋转角度,可以控制图像的旋转效果。文章还详细介绍了布局文件代码和Activity代码,旨在帮助开发者理解和实践图像操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是android新手,写博客是为了做好学习笔记,以便以后能经常复习。另外,还想能过这个方式和大家交流学习,希望大家能够指正我的错误,帮助我提高能力,丰富知识。

缩放图像的方法有很多种,最简单的依法就是改变ImageView组件的大小。但应将<ImageView>标签的android:scaleType属性值设为fitCenter。旋转图像可以用android.graphics.Matris类的setRotate方法来实现,通过该方法可以指定旋转的任度数。

这里用了两个拖动条(SeekBar),第一个SeekBar用于缩放图像(android:max属性值为240),第2个SeekBar用于旋转图像(android:max属性值为360,也就是说,通过该SeekBar可以使图像最多旋转360度)。

布局文件代码如下:main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" > <TextView android:layout_gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ImageView android:id="@+id/one" android:layout_width="150dp" android:layout_height="160dp" android:src="@drawable/b" android:scaleType="fitCenter" /> <TextView android:id="@+id/tv1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="图像宽度:149 图像高度:159" /> <SeekBar android:progress="120" android:id="@+id/s1" android:layout_height="wrap_content" android:max="240" android:layout_width="fill_parent" android:layout_marginTop="20dp"> </SeekBar> <TextView android:id="@+id/tv2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="0度" /> <SeekBar android:id="@+id/s2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:max="360" /> </LinearLayout> Activity代码:csf.java
package csf.imamgeview; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.util.DisplayMetrics; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; public class csf extends Activity implements OnSeekBarChangeListener{ private int m= 29,n=39;//图像的最小宽度和高度。 private ImageView one; private TextView tv1, tv2; private Matrix matrix = new Matrix(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); one=(ImageView)findViewById(R.id.one); tv1=(TextView)findViewById(R.id.tv1); tv2=(TextView)findViewById(R.id.tv2); SeekBar s1=(SeekBar)findViewById(R.id.s1); SeekBar s2=(SeekBar)findViewById(R.id.s2); s1.setOnSeekBarChangeListener(this); s2.setOnSeekBarChangeListener(this); //为了自适应屏幕的宽度,使图你放大到与屏幕宽度相等时为止,使用如下代码来获得屏幕的宽度,并将屏幕宽度与图像的最小宽度的差作为android:max属性 //的值 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); s1.setMax(dm.widthPixels - m); } @Override //在SeekBar类的onProgressChanged事件方法中需要控制图像的缩放和旋转 public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { //处理图像缩放 if(seekBar.getId()==R.id.s1) { int newwidth=progress+m;//计算处缩放后图像的新宽度 int newheigth=(int)progress*159/149+n;//计算处缩放后图像的新高度 //设置ImageView的大小 one.setLayoutParams(new LinearLayout.LayoutParams(newwidth,newheigth)); tv1.setText("图像宽度:"+newwidth+" 图像高度:"+newheigth); } //处理图像旋转 if(seekBar.getId()==R.id.s2) { //装载R.drawable.b图像文件,并返回Bitmap对像 Bitmap bitmap=((BitmapDrawable) getResources().getDrawable(R.drawable.b)).getBitmap(); //设置图像的旋转角度 matrix.setRotate(progress); //旋转图像,并生成新的Bitmap对像 bitmap=Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); //重新在ImageView组件中显示旋转后的图像 one.setImageBitmap(bitmap); tv2.setText(progress+"度"); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值