您的位置:首页 > 其它

安卓控件使用系列16:ImageView实现图片缩放和旋转

2015-10-02 19:24 609 查看
在安卓中使用ImageView控件对图片进行旋转和缩放操作是经常遇到的开发背景,下面我们来分享一下它的实现方法。

这个例子实现的是通过滑动滑杆来控制图片的缩放和旋转,并显示缩放的大小和旋转的角度。

整体思路:首先在布局文件中定义一个ImageView控件,用于设置图片,放置两个SeekBar控件用于表示缩放和旋转的状态,放置两个TextView控件用于显示缩放的大小和旋转的角度;在活动中实现OnSeekBarChangeListener,在onProgressChanged这个方法中如果滑动的是第一个SeekBar控件,按比例设置图片的宽度和高度,并在TextView控件上显示图片的宽度和高度;如果滑动的是第二个SeekBar控件,把资源中的图片转换为位图,设置旋转角度,创建设置旋转了这个角度的位图,将这个位图绑定到这个ImageView控件上,并在TextView控件上显示旋转的角度。

activity_main.xml文件:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ImageView
android:id="@+id/imageview"
android:layout_width="200dp"
android:layout_height="150dp"
android:src="@drawable/dog"
android:scaleType="fitCenter"
/>
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="宽度240,高度160"
android:layout_marginTop="10dp"
/>
<SeekBar
android:id="@+id/seekbar1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:max="240"
android:progress="120"
android:layout_marginTop="10dp"
/>

<TextView
android:id="@+id/textview2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="0度"
android:layout_marginTop="10dp"
/>
<SeekBar
android:id="@+id/seekbar2"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:max="360"
/>
</LinearLayout>


MainActivity.java文件:

public class MainActivity extends Activity implements OnSeekBarChangeListener{
private int minWidth=80;
private ImageView imageview;
private TextView textview1,textview2;
private SeekBar seekbar1,seekbar2;
private Matrix matrix=new Matrix();//定义一个旋转的类,用来设置旋转的角度

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageview=(ImageView)findViewById(R.id.imageview);
textview1=(TextView)findViewById(R.id.textview1);
textview2=(TextView)findViewById(R.id.textview2);
seekbar1=(SeekBar)findViewById(R.id.seekbar1);
seekbar2=(SeekBar)findViewById(R.id.seekbar2);
seekbar1.setOnSeekBarChangeListener(this);
seekbar2.setOnSeekBarChangeListener(this);

//		这三个其实对本功能没有影响,可以去掉。
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
seekbar1.setMax(dm.widthPixels-minWidth);
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
if(seekBar.getId()==R.id.seekbar1){
int newWidth=progress+minWidth;
int newHeight=(int)(newWidth*3/4);//按原图片比例进行缩放
imageview.setLayoutParams(new LinearLayout.LayoutParams(newWidth,newHeight));
textview1.setText("图像宽度"+newWidth+"图像宽度"+newHeight);
}else if(seekBar.getId()==R.id.seekbar2){
Bitmap bitmap=((BitmapDrawable)(getResources().getDrawable(R.drawable.dog))).getBitmap();
matrix.setRotate(progress);//设置翻转的角度
bitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
imageview.setImageBitmap(bitmap);
textview2.setText(progress+"度");
}
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: