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

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

界面的设计:
Android开发之利用seekbar与网络实现图片的旋转与缩放(二)_第1张图片
布局的代码:




    

        

            
        

        

            

                

                

                

                
            
        

    

    

    

    

    


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


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

然后是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) {

    }

}

到此就基本上结束了,
运行的效果图:
Android开发之利用seekbar与网络实现图片的旋转与缩放(二)_第3张图片

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

你可能感兴趣的:(wuluo,Android)