为了账号安全,请及时绑定邮箱和手机立即绑定

图片的简单旋转缩放

标签:
Android

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView 
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"
        android:class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="@drawable/ic_launcher"/>

    <!-- 

     在这里总结一下scaleType属性的意思:

     1、matrix:保持原图的效果(不随着ImageView的大小而变化),图片的左上角和ImageView的左上角对齐

     2、fitXY:  不保持原图效果,x、y方向都进行缩放,也就是填充的效果

     3、fitStart:不保持原图的效果,x、y按等比例的方式进行缩放到ImageView的宽度大小(所谓宽度就是边短的),图片的位置在ImageView开始的位置(左上角即为开始位置)

     4、fitCenter:不保持原图的效果,x、y按等比例的方式进行缩放到ImageView的宽度大小(所谓宽度就是边短的),图片的位置在ImageView中间的位置

     5、fitEnd:不保持原图的效果,x、y按等比例的方式进行缩放到ImageView的宽度大小(所谓宽度就是边短的),图片的位置在ImageView末尾的位置

     6、center:保持原图的大小,当图片的大小>ImageView的大小时候,所显示的是图片中间的区域;当图片的大小<ImageView的大小时候,会位于ImageView的中心而不是屏幕的中心

     7、centerCrop:不保持原图的大小,x、y等比例缩放到ImageView的高度大小(所谓高度就是边长的),图片居中显示,溢出部分不显示

     8、centerInside:不保持原图的大小,当图片的大小>ImageView的大小,图片会按图片的宽高进行缩放到能够显示完整图片为止,当图片的大小<ImageView的大小,图片会保持原来的效果,居中显示

    以上都为自己的总结,如有疑问可以自己进行尝试。

     -->

<TextView 
    android:id="@+id/tv1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="对图片进行缩放"/>
    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView 
        android:id="@+id/tv2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="对图片进行旋转"/>
    <SeekBar
        android:id="@+id/seekBar2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

MainActivity.java:

package com.example.myimageview;
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.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity implements OnSeekBarChangeListener {
int windowWidth;
int windowHeight;
private Matrix matrix = new Matrix();
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SeekBar seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
SeekBar seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
iv = (ImageView) findViewById(R.id.iv);
seekBar1.setOnSeekBarChangeListener(this);
seekBar2.setOnSeekBarChangeListener(this);
//得到屏幕的宽高
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
windowWidth = dm.widthPixels;
windowHeight = dm.heightPixels;
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
//在这里处理相关的逻辑代码
if(seekBar.getId() == R.id.seekBar1){
//在这里执行缩放的操作
iv.setLayoutParams(new LinearLayout.LayoutParams(100+progress, windowHeight*2/5));
//之前我是这么写的iv.setlayoutParams(new ViewGroup.LayoutParams(100+progress, windowHeight*2/5))发生ViewGroup.LayoutParams向Linearlayout.LayoutParams强制转换错误
/*
 * Set the layout parameters associated with this view. These supply parameters to the parent of this view specifying how it should be arranged.
 * 此话的意思是设置此视图的布局关联的布局参数,此视图的父视图指定安排它的参数。(因为此视图的父视图是Linearlayout,当你写LinearLayout的父类ViewGroup的时候就会发生强转的错误)
 */
}else{
//在这里执行旋转的操作
matrix.setRotate(progress);
@SuppressWarnings("deprecation")
Bitmap bp = ((BitmapDrawable)(getResources().getDrawable(R.drawable.ic_launcher))).getBitmap();
/*
 * 上面的是Drawable向Bitmap进行转化
 * Bitmap向BitmapDrawable转化的时候直接BitmapDrawable bd = new BitmapDrawable(Bitmap bit)
 */
//上面已经对矩阵进行了旋转,在这里只要由这个矩阵生成Bitmap就ok
Bitmap scale_bp = Bitmap.createBitmap(bp, 0, 0, bp.getWidth(), bp.getHeight(), matrix, true);
iv.setImageBitmap(scale_bp);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
}

原文链接:http://www.apkbus.com/blog-523232-59419.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消