Android开发之利用seekbar与网络实现图片的旋转与缩放(二)

版权声明:转载请标明链接, https://blog.csdn.net/qq_43433255/article/details/88365160

在上一篇:https://blog.csdn.net/qq_43433255/article/details/88363948
简单介绍了,如何利用seekbar进行图片的旋转与缩放,但只能是一张图片,而且还只能是本地的图片,这次,利用网络的方式,实现多张图片的旋转与缩放;

界面的设计:
在这里插入图片描述
布局的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#d3d3d3"
    tools:context=".MainActivity"
    tools:layout_editor_absoluteY="81dp">

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="239dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:id="@+id/ll_1"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:orientation="vertical"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <ImageView
                android:id="@+id/iv_pic"
                android:layout_width="161dp"
                android:layout_height="150dp"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="16dp"
                android:adjustViewBounds="true"
                android:scaleType="fitCenter"
                android:src="@drawable/onmk"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_width="110dp"
            android:layout_height="201dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_weight="3"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toEndOf="@+id/ll_1"
            app:layout_constraintTop_toTopOf="parent">

            <RadioGroup
                android:id="@+id/download_pic"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:orientation="vertical">

                <RadioButton
                    android:id="@+id/rb_pic1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="图片1"
                    android:textColor="#f0e68c"
                    android:textSize="18dp" />

                <RadioButton
                    android:id="@+id/rb_pic2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="15dp"
                    android:layout_weight="1"
                    android:text="图片2"
                    android:textColor="#f0e68c"
                    android:textSize="18dp" />

                <RadioButton
                    android:id="@+id/rb_pic3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="15dp"
                    android:layout_weight="1"
                    android:text="图片3"
                    android:textColor="#f0e68c"
                    android:textSize="18dp" />

                <RadioButton
                    android:id="@+id/rb_pic4"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="15dp"
                    android:layout_weight="1"
                    android:text="图片4"
                    android:textColor="#f0e68c"
                    android:textSize="18dp" />
            </RadioGroup>
        </LinearLayout>

    </LinearLayout>

    <TextView
        android:id="@+id/tv_tr"
        android:layout_width="208dp"
        android:layout_height="33dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="12dp"
        android:text="图形缩放"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout2" />

    <SeekBar
        android:id="@+id/sb_scale"
        android:layout_width="360dp"
        android:layout_height="30dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:max="500"
        android:progress="250"
        android:scaleType="fitCenter"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_tr" />

    <TextView
        android:id="@+id/tv_sc"
        android:layout_width="248dp"
        android:layout_height="36dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="8dp"
        android:text="图片旋转"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/sb_scale" />

    <SeekBar
        android:id="@+id/sb_roaste"
        android:layout_width="360dp"
        android:layout_height="30dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="8dp"
        android:max="360"
        android:scaleType="fitCenter"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_sc" />

</android.support.constraint.ConstraintLayout>

这里添加的图片是本地图片,作为背景图使用的,只要打开程序,就会是另外的图片;
添加网路权限:

<uses-permission android:name="android.permission.INTERNET"/>

在这里插入图片描述

然后是main。activity的代码:

package com.example.wuluo.six;


import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.graphics.Matrix;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity implements View.OnClickListener,SeekBar.OnSeekBarChangeListener{
    private ImageView iv_pic;
    private SeekBar sb_scale;
    private SeekBar sb_roaste;
    private RadioButton rb_pic1;
    private RadioButton rb_pic2;
    private RadioButton rb_pic3;
    private RadioButton rb_pic4;
    private Matrix matrix;
    private byte[] b;
    private byte[] bb;
    int flag=1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        iv_pic=(ImageView) findViewById(R.id.iv_pic);
        sb_scale=(SeekBar) findViewById(R.id.sb_scale);
        sb_roaste=(SeekBar) findViewById(R.id.sb_roaste);
        rb_pic1=(RadioButton) findViewById(R.id.rb_pic1);
        rb_pic2=(RadioButton) findViewById(R.id.rb_pic2);
        rb_pic3=(RadioButton) findViewById(R.id.rb_pic3);
        rb_pic4=(RadioButton) findViewById(R.id.rb_pic4);
        rb_pic1.setOnClickListener(this);
        rb_pic2.setOnClickListener(this);
        rb_pic3.setOnClickListener(this);
        rb_pic4.setOnClickListener(this);
        //google网络请求
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads().detectDiskWrites().detectNetwork()
                .penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
                .penaltyLog().penaltyDeath().build());

        sb_scale.setOnSeekBarChangeListener(this);
        sb_roaste.setOnSeekBarChangeListener(this);


        matrix=new Matrix();
        //获得屏幕宽度
        DisplayMetrics displayMetrics=new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int screen=displayMetrics.widthPixels;
        //S设置缩放条的最大值
        sb_scale.setMax(screen);
        sb_roaste.setMax(365);
        String i1="http://img06.tooopen.com/images/20170513/tooopen_sy_209392029443.jpg";
        b=downImage(i1);
        //显示图片
        iv_pic.setImageBitmap(BitmapFactory.decodeByteArray(b,0,b.length));

    }

    public void onClick(View view) {
        Intent intent=new Intent();
        switch (view.getId()) {
            case R.id.rb_pic1:
                //下载图片
                String i1="http://img06.tooopen.com/images/20170513/tooopen_sy_209392029443.jpg";
                b=downImage(i1);
                flag=1;
                //显示图片
                iv_pic.setImageBitmap(BitmapFactory.decodeByteArray(b,0,b.length));
                break;
            case R.id.rb_pic2:
                //下载图片
                String i2="http://static.pig66.com/uploadfile/2017/1024/20171024061038994.jpg";
                b=downImage(i2);
                //显示图片
                flag=2;
                iv_pic.setImageBitmap(BitmapFactory.decodeByteArray(b,0,b.length));
                break;
            case R.id.rb_pic3:
                //下载图片
                String i3="http://pic6.photophoto.cn/20080302/0035035963793264_b.jpg";
                b=downImage(i3);
                //显示图片
                flag=3;
                iv_pic.setImageBitmap(BitmapFactory.decodeByteArray(b,0,b.length));
                break;
            case R.id.rb_pic4:
                //下载图片
                String i4="http://pic26.photophoto.cn/20130107/0035035969343725_b.jpg";
                b=downImage(i4);
                //显示图片
                flag=4;
                iv_pic.setImageBitmap(BitmapFactory.decodeByteArray(b,0,b.length));
                break;
        }
    }
    /********************************************************************************
     * 自定义http协议下载图片的方法
     ********************************************************************************/
    private byte[] downImage(String i){
        ByteArrayOutputStream os =new ByteArrayOutputStream();//定义一个输出字节流
        try{
            URL url=new URL(i);
            HttpURLConnection connection=(HttpURLConnection) url.openConnection();//获得链接对象
            connection.setConnectTimeout(5000); //设置链接超时
            connection.setDoInput(true);//设置能获取服务器的响应内容
            connection.setRequestMethod("GET");//设置http的响应方式
            int code=connection.getResponseCode();  //发起请求//获取响应码状态
            if(code==200){//表示获取成功
                //获得输入流
                InputStream inputStream=connection.getInputStream();
                byte[] d=new byte[1024];
                int len;//确定读入数据的长度
                while ((len=inputStream.read(d))!=-1){
                    os.write(d,0,len);//循环写入到输出流,直到长度为-1
                }
                return os.toByteArray();
            }
        }catch (MalformedURLException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
        return  null;
    }
    /********************************************************************************
     * SeekBar控制图片旋转&缩放
     ********************************************************************************/
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        if(seekBar.getId()==R.id.sb_scale){
            int ivWidth=i;
            int ivHeight=i*3/4;
            iv_pic.setLayoutParams(new LinearLayout.LayoutParams(ivWidth,ivHeight));
        }else if(seekBar.getId()==R.id.sb_roaste){
            //设置旋转度数
            float d=i;
            matrix.setRotate(d);
            //获取选择的图片
            if(flag==1)
            {
                String i1="http://img06.tooopen.com/images/20170513/tooopen_sy_209392029443.jpg";
                bb=downImage(i1);
            }
            else if(flag==2)
            {
                String i2="http://static.pig66.com/uploadfile/2017/1024/20171024061038994.jpg";
                bb=downImage(i2);
            }
            else if(flag==3)
            {
                String i3="http://pic6.photophoto.cn/20080302/0035035963793264_b.jpg";
                bb=downImage(i3);
            }
            else if(flag==4)
            {
                String i4="http://pic26.photophoto.cn/20130107/0035035969343725_b.jpg";
                bb=downImage(i4);
            }

            Bitmap bitmap1=BitmapFactory.decodeByteArray(bb,0,bb.length).createBitmap(BitmapFactory.decodeByteArray(bb,0,bb.length),0,0,BitmapFactory.decodeByteArray(bb,0,bb.length).getWidth(),BitmapFactory.decodeByteArray(bb,0,bb.length).getHeight(),matrix,true);
            iv_pic.setImageBitmap(bitmap1);

        }
    }
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }

}

到此就基本上结束了,
运行的效果图:
在这里插入图片描述

当然,这个程序需要连接网络,才能正确打开,如果不连接网络,程序是不能打开的,
这一点还需要优化!

猜你喜欢

转载自blog.csdn.net/qq_43433255/article/details/88365160