Android Imageview图片旋转和大小变化

先看效果图:

直接上代码吧

activity.java

import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.graphics.Bitmap;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.media.Image;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.DisplayMetrics;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.SeekBar;import android.widget.TextView;public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener {    private ImageView iv_route_image;    private TextView tv_size;    private TextView tv_route;    private SeekBar sb_change_size;    private SeekBar sb_change_route;    private int minWidth = 300;    private int routeAngle;    private Matrix matrix = new Matrix();    private static final int ROUTE_IMAGE_MSG = 1;    /**     * 使用handle似乎旋转更流畅点(博主希望你们有更好的建议,是旋转更流畅,欢迎评论)     */    private Handler handler = new Handler(){        @Override        public void handleMessage(@NonNull Message msg) {            super.handleMessage(msg);            switch (msg.what){                case ROUTE_IMAGE_MSG:                {                    tv_route.setText("角度:    "+routeAngle);                    //先获取目标图片的参数信息                    Bitmap bitmap = ((BitmapDrawable)(getResources().getDrawable(R.drawable.back))).getBitmap();                    matrix.setRotate(routeAngle);//设置反转角度                    bitmap = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);                    iv_route_image.setImageBitmap(bitmap);                }                break;                default:                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initData();    }    private void initData() {        //获取屏幕参数        DisplayMetrics displayMetrics = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);        sb_change_size.setMax(displayMetrics.widthPixels-minWidth);//屏幕宽度-最小值    }    private void initView() {          iv_route_image = findViewById(R.id.iv_route_image);          tv_size= findViewById(R.id.tv_size);          tv_route= findViewById(R.id.tv_route);          sb_change_size= findViewById(R.id.sb_change_size);          sb_change_size.setOnSeekBarChangeListener(this);          sb_change_route= findViewById(R.id.sb_change_route);          sb_change_route.setOnSeekBarChangeListener(this);    }    @Override    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {        switch (seekBar.getId()){            case R.id.sb_change_size:            {                tv_size.setText("大小:    "+i);                int newWidth = i+minWidth;                int newHeight = (int)newWidth*3/4;//根据image view的大小就是一个3/4的比例,同时新的大小也应该满足                iv_route_image.setLayoutParams(new LinearLayout.LayoutParams(newWidth,newHeight));//设置image view布局大小            }            break;            case R.id.sb_change_route:            {                routeAngle = i;                Message msg = new Message();                msg.what = ROUTE_IMAGE_MSG;                handler.sendMessage(msg);            }            break;            default:                break;        }    }    @Override    public void onStartTrackingTouch(SeekBar seekBar) {    }    @Override    public void onStopTrackingTouch(SeekBar seekBar) {    }}

布局文件

<?xml version="1.0" encoding="utf-8"?>                                                                      

更多相关文章

  1. Android(安卓)3D 旋转的三角形(二)
  2. Android4.1 Rotation 小结
  3. android 获取屏幕大小
  4. android webview设置自适应任意大小的pc网页
  5. android 检测应用程序信息
  6. Android文件夹大小
  7. android 字体大小,样式 ,像素的设置
  8. android 字体大小像素的设置
  9. android:随记

随机推荐

  1. Android(安卓)嵌入式 linux 去掉启动时闪
  2. android yuv摄像
  3. Service and Broadcast
  4. GIS的学习(二十四)android异步调用geoserve
  5. Android(安卓)ConstraintLayout详解
  6. android应用集成google登录
  7. Android(安卓)SQLite 错误 SQLiteExcepti
  8. 最全面的安卓ANR
  9. Android(安卓)NDK网络通信篇(五)之UDP通信
  10. Content Provider使用方法以及Android运