Android开发实现对图片缩放旋转控制

本文介绍了在Android开发中如何实现图片的缩放和旋转控制,包括遇到的问题如接口不完整、非中心缩放和Matrix操作不熟悉。通过提供Java代码示例,展示了如何使用ImageView、SeekBar和Matrix来实现这一功能。

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

xml 中界面设计
遇到的主要问题
1、接口构建不完整
2、缩放的位置不是从中心缩放,效果实现得并不好
3、Matrix使用并不太熟悉
java代码
package com.example.asus.app332;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
//import android.opengl.Matrix;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.graphics.Matrix;
//import android.OnSeekBarChangeListener;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class Main7Activity extends AppCompatActivity {
//接口重构不完整
private ImageView iv_pic;
private SeekBar sb_scale;
private SeekBar sb_roate;
private Button next;
private Matrix matrix = new Matrix();
class sb_OnSeekBarChangeListener implements OnSeekBarChangeListener{
@Override

    public  void onProgressChanged(SeekBar seekBar,int i,boolean b){
        // TODO Auto-generated method stub
        if(seekBar.getId()==R.id.sb_scale){
            int ivWidth=i;
            int ivHeight=(int)i*3/4;
            iv_pic.setLayoutParams(new LinearLayout.LayoutParams(ivWidth,ivHeight));
        }
        else if(seekBar.getId()==R.id.sb_roaste){
                                                Bitmap bitmap = ((BitmapDrawable) (getResources().getDrawable(R.mipmap.b1))).getBitmap();

                                                matrix.setRotate(i);//设置翻转的角度
                                                bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth() , bitmap.getHeight(), matrix,true);
                                               iv_pic.setImageBitmap(bitmap);

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

    }

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

    }

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main7);
    iv_pic = (ImageView) findViewById(R.id.imageView5);
    sb_roate = (SeekBar) findViewById(R.id.sb_roaste);
    sb_scale = (SeekBar) findViewById(R.id.sb_scale);
    DisplayMetrics displayMetrics = new DisplayMetrics();//获取屏幕分辨率的信息
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    int screen=displayMetrics.widthPixels;
    sb_scale.setMax(500);
    sb_roate.setMax(screen);
    sb_roate.setOnSeekBarChangeListener(new sb_OnSeekBarChangeListener());
    sb_scale.setOnSeekBarChangeListener(new sb_OnSeekBarChangeListener());
    next=(Button)findViewById(R.id.next7) ;
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent();
            intent.setClass(com.example.asus.app332.Main7Activity.this,Main8Activity.class);
            startActivity(intent);
        }
    });
}

}
xml代码

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


<SeekBar
    android:id="@+id/sb_scale"
    android:layout_width="400dp"
    android:layout_height="30dp"
    android:max="400"
    android:layout_marginTop="10dp"
    android:progress="120"
     />

<SeekBar
    android:id="@+id/sb_roaste"
    android:layout_width="400dp"
    android:layout_height="30dp"
    android:layout_marginTop="20dp"
    android:max="360" />

<Button
    android:id="@+id/next7"
    android:layout_width="61dp"
    android:layout_height="59dp"
    android:background="@mipmap/next1"
    android:layout_marginLeft="320dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="1.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.43" />

实现效果
在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值