在上一篇:https://blog.csdn.net/qq_43433255/article/details/88363948
简单介绍了,如何利用seekbar进行图片的旋转与缩放,但只能是一张图片,而且还只能是本地的图片,这次,利用网络的方式,实现多张图片的旋转与缩放;
这里添加的图片是本地图片,作为背景图使用的,只要打开程序,就会是另外的图片;
添加网路权限:
然后是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) {
}
}
当然,这个程序需要连接网络,才能正确打开,如果不连接网络,程序是不能打开的,
这一点还需要优化!