• 压缩图片和改变图片图形


    压缩图片和改变图片图形

    GitHub网址:https://github.com/qianshao1030/BitmapDemo

    包名:compile 'jp.wasabeef:glide-transformations:3.0.1'

     

    代码实现:

    MainActivity:
      1 /*
      2 1,质量压缩法
      3     1.1质量压缩不会减少图片的像素
      4     1.2在像素不变的前提下改变图片的位深及透明度等,来达到压缩图片的目的。
      5     1.3压缩的图片文件大小会有改变,但是导入成bitmap后占得内存是不变的
      6 2,采样率压缩法
      7     2.1内存的使用少,不会过多的占用内存
      8     2.2可以先只读取图片的边,通过宽和高设定好取样率后再加载图片
      9     2.3
     10 3,缩放法
     11     3.1通过缩放图片像素来减少图片占用内存大小
     12  */
     13 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
     14 
     15     private static final String IMG_URL_0 = "http://pic.xiami.net/images/artistlogo/77/14677816895777.jpg";
     16     protected TextView tvOld;
     17     protected TextView tv3;
     18     private String baseUrl = "http://pic.xiami.net";
     19     private int contentLength;
     20     private String IMG_URL_1 = "http://pic9.nipic.com/20100823/4361515_000842599423_2.jpg";
     21     private String IMG_URL_2 = "http://attachments.gfan.com/forum/attachments2/201302/03/11281446n2st1its4152n5.jpg";
     22     private String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/bitmaps/";
     23 
     24     private void showList() {
     25         DialogUtil.showListDialog(this, "Android中图片压缩方案", new String[]{
     26                 "0,加载原图",
     27                 "1,下载原图",
     28                 "2,质量压缩法,不压缩保存到本地",
     29                 "3,质量压缩法,质量压缩保存到本地",
     30                 "4,采样率压缩法,保存",
     31                 "5,缩放法,方式一!",
     32                 "6,缩放法,方式二!",
     33         }, new DialogInterface.OnClickListener() {
     34             @Override
     35             public void onClick(DialogInterface dialog, int which) {
     36                 switch (which) {
     37                     case 0:
     38                         //加载原图,并且展示!
     39                         load0();
     40                         break;
     41                     case 1:
     42                         //下载原图,并且保存本地,从本加载展示!
     43                         load1();
     44                         break;
     45                     case 2:
     46                         //
     47                         load2();
     48                         break;
     49                     case 3:
     50                         load3();
     51                         break;
     52                     case 4:
     53                         load4();
     54                         break;
     55                     case 5:
     56                         load5();
     57                         break;
     58                     case 6:
     59                         load6();
     60                         break;
     61                 }
     62             }
     63         });
     64     }
     65 
     66     private void load6() {
     67         Observable.create(new ObservableOnSubscribe<String>() {
     68             @Override
     69             public void subscribe(ObservableEmitter<String> e) throws Exception {
     70                 ResponseBody body = new Retrofit.Builder()
     71                         .baseUrl(baseUrl)
     72                         .build()
     73                         .create(NetServerInterface.class)
     74                         .getBitmap(IMG_URL_1)
     75                         .execute()
     76                         .body();
     77                 contentLength = (int) body.contentLength() / 1024;
     78                 InputStream stream = body
     79                         .byteStream();
     80                 Bitmap image = BitmapFactory.decodeStream(stream);
     81 
     82                 ByteArrayOutputStream out = new ByteArrayOutputStream();
     83                 image.compress(Bitmap.CompressFormat.JPEG, 85, out);
     84                 int size = contentLength;
     85                 //--原大小/内存小小后,开平方根.
     86                 float zoom = (float)Math.sqrt(size * 1024 / (float)out.toByteArray().length);
     87 //
     88                 Matrix matrix = new Matrix();
     89                 matrix.setScale(zoom, zoom);
     90 
     91                 Bitmap result = Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), matrix, true);
     92                 //清空.
     93                 out.reset();
     94                 result.compress(Bitmap.CompressFormat.JPEG, 85, out);
     95                 while(out.toByteArray().length > size * 1024){
     96                     DemonstrateUtil.showLogResult(out.toByteArray().length+"***");
     97                     matrix.setScale(0.9f, 0.9f);
     98                     result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true);
     99                     out.reset();
    100                     result.compress(Bitmap.CompressFormat.JPEG, 85, out);
    101                 }
    102 
    103                 File file = new File(Environment.getExternalStorageDirectory(), "load6.jpg");
    104                 FileOutputStream fos = new FileOutputStream(file);
    105                 fos.write(out.toByteArray());
    106                 fos.flush();
    107                 fos.close();
    108                 String filePath = file.getPath();
    109                 e.onNext(filePath);
    110             }
    111         })
    112                 .subscribeOn(Schedulers.io())
    113                 .observeOn(AndroidSchedulers.mainThread())
    114                 .subscribe(new Consumer<String>() {
    115                     @Override
    116                     public void accept(String path) throws Exception {
    117                         tvOld.setText("原始大小:" + contentLength + "kb");
    118                         File file = new File(path);
    119                         int fileLenth = (int) (file.length() / 1024);
    120                         tv.setText("保存后大小:" + fileLenth + "kb");
    121 
    122                         Bitmap bitmap = BitmapFactory.decodeFile(path);
    123                         int byteCount = bitmap.getByteCount() / 1024;
    124                         tv3.setText("加载到内存的大小:" + byteCount);
    125                         iv.setImageBitmap(bitmap);
    126                     }
    127                 });
    128     }
    129 
    130     private void load5() {
    131         Observable.create(new ObservableOnSubscribe<String>() {
    132             @Override
    133             public void subscribe(ObservableEmitter<String> e) throws Exception {
    134                 ResponseBody body = new Retrofit.Builder()
    135                         .baseUrl(baseUrl)
    136                         .build()
    137                         .create(NetServerInterface.class)
    138                         .getBitmap(IMG_URL_1)
    139                         .execute()
    140                         .body();
    141                 contentLength = (int) body.contentLength() / 1024;
    142                 InputStream stream = body
    143                         .byteStream();
    144                 Bitmap bmp = BitmapFactory.decodeStream(stream);
    145 
    146                 // 尺寸压缩倍数,值越大,图片尺寸越小
    147                 int ratio = 2;
    148                 // 压缩Bitmap到对应尺寸
    149                 //int width,宽 int height,高 Config config,决定图片质量.
    150                 Bitmap result = Bitmap.createBitmap(bmp.getWidth() / ratio, bmp.getHeight() / ratio, Bitmap.Config.ARGB_8888);
    151                 Canvas canvas = new Canvas(result);
    152                 Rect rect = new Rect(0, 0, bmp.getWidth() / ratio, bmp.getHeight() / ratio);
    153                 canvas.drawBitmap(bmp, null, rect, null);
    154 
    155                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
    156                 // 把压缩后的数据存放到baos中
    157                 result.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    158                 File file = new File(Environment.getExternalStorageDirectory(), "load5.jpg");
    159                 FileOutputStream fos = new FileOutputStream(file);
    160                 fos.write(baos.toByteArray());
    161                 fos.flush();
    162                 fos.close();
    163                 String filePath = file.getPath();
    164                 e.onNext(filePath);
    165             }
    166         })
    167                 .subscribeOn(Schedulers.io())
    168                 .observeOn(AndroidSchedulers.mainThread())
    169                 .subscribe(new Consumer<String>() {
    170                     @Override
    171                     public void accept(String path) throws Exception {
    172                         tvOld.setText("原始大小:" + contentLength + "kb");
    173                         File file = new File(path);
    174                         int fileLenth = (int) (file.length() / 1024);
    175                         tv.setText("保存后大小:" + fileLenth + "kb");
    176 
    177                         Bitmap bitmap = BitmapFactory.decodeFile(path);
    178                         int byteCount = bitmap.getByteCount() / 1024;
    179                         tv3.setText("加载到内存的大小:" + byteCount);
    180                         iv.setImageBitmap(bitmap);
    181                     }
    182                 });
    183     }
    184 
    185     private void load4() {
    186         Observable.create(new ObservableOnSubscribe<String>() {
    187             @Override
    188             public void subscribe(ObservableEmitter<String> e) throws Exception {
    189                 ResponseBody body = new Retrofit.Builder()
    190                         .baseUrl(baseUrl)
    191                         .build()
    192                         .create(NetServerInterface.class)
    193                         .getBitmap(IMG_URL_2)
    194                         .execute()
    195                         .body();
    196                 contentLength = (int) body.contentLength() / 1024;
    197                 InputStream stream = body
    198                         .byteStream();
    199                 File file = new File(Environment.getExternalStorageDirectory(), "load4.jpg");
    200                 FileOutputStream out = new FileOutputStream(file);
    201                 out.write(body.bytes());
    202                 out.close();
    203                 String filePath = file.getPath();
    204                 e.onNext(filePath);
    205             }
    206         })
    207                 .subscribeOn(Schedulers.io())
    208                 .observeOn(AndroidSchedulers.mainThread())
    209                 .subscribe(new Consumer<String>() {
    210                     @Override
    211                     public void accept(String path) throws Exception {
    212                         tvOld.setText("原始大小:" + contentLength + "kb");
    213                         File file = new File(path);
    214                         int fileLenth = (int) (file.length() / 1024);
    215                         tv.setText("保存后大小:" + fileLenth + "kb");
    216 
    217                         //使用采样率进行压缩
    218                         BitmapFactory.Options newOpts = new BitmapFactory.Options();
    219                         //开始读入图片,此时把options.inJustDecodeBounds 设回true了
    220                         newOpts.inJustDecodeBounds = true;
    221                         //此时返回bitmap为空
    222                         Bitmap bitmap = BitmapFactory.decodeFile(path, newOpts);
    223 
    224                         newOpts.inJustDecodeBounds = false;
    225                         int w = newOpts.outWidth;
    226                         int h = newOpts.outHeight;
    227                         //现在主流手机比较多是1280*720分辨率,所以高和宽我们设置为
    228                         //这里设置高度为1280f
    229                         float hh = 1280f;
    230                         //这里设置宽度为720f
    231                         float ww = 720f;
    232                         //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
    233                         //be=1表示不缩放
    234                         int be = 1;
    235                         if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
    236                             be = (int) (newOpts.outWidth / ww);
    237                         } else if (w < h && h > hh) {//如果高度高的话根据高度固定大小缩放
    238                             be = (int) (newOpts.outHeight / hh);
    239                         }
    240                         if (be <= 0) {
    241                             be = 1;
    242                         }
    243 
    244                         //设置缩放比例
    245                         newOpts.inSampleSize = be;
    246                         //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
    247                         bitmap = BitmapFactory.decodeFile(path, newOpts);
    248 
    249                         //压缩好比例大小后再进行质量压缩
    250                         ByteArrayOutputStream baos = new ByteArrayOutputStream();
    251                         bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
    252                         int options = 100;
    253                         while (baos.toByteArray().length / 1024 > 100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩
    254                             //重置baos即清空baos
    255                             baos.reset();
    256                             //这里压缩options%,把压缩后的数据存放到baos中
    257                             bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);
    258                             options -= 10;//每次都减少10
    259                         }
    260 
    261                         int len = baos.toByteArray().length / 1024;
    262                         tv3.setText("内存中的大小:" + len + "kb");
    263                         //把压缩后的数据baos存放到ByteArrayInputStream中
    264                         ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
    265                         //把ByteArrayInputStream数据生成图片
    266                         Bitmap bitmap3 = BitmapFactory.decodeStream(isBm, null, null);
    267                         tv.setText("保存后大小:" + fileLenth + "kb"+"bitmap:"+bitmap3.getByteCount()/1024+"--");
    268                         iv.setImageBitmap(bitmap3);
    269 
    270                         /*File file5 = new File(Environment.getExternalStorageDirectory(), "load5.jpg");
    271                         FileOutputStream out = new FileOutputStream(file5);
    272                         out.write(baos.toByteArray());
    273                         out.close();
    274                         baos.close();*/
    275                     }
    276                 });
    277     }
    278 
    279     private void load3() {
    280         Observable.create(new ObservableOnSubscribe<String>() {
    281             @Override
    282             public void subscribe(ObservableEmitter<String> e) throws Exception {
    283                 ResponseBody body = new Retrofit.Builder()
    284                         .baseUrl(baseUrl)
    285                         .build()
    286                         .create(NetServerInterface.class)
    287                         .getBitmap(IMG_URL_1)
    288                         .execute()
    289                         .body();
    290                 contentLength = (int) body.contentLength() / 1024;
    291                 InputStream stream = body
    292                         .byteStream();
    293 
    294                 Bitmap bitmap = BitmapFactory.decodeStream(stream);
    295 
    296                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
    297                 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
    298                 int options = 100;
    299                 while (baos.toByteArray().length / 1024 > 100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩
    300                     //重置baos即清空baos
    301                     baos.reset();
    302                     //这里压缩options%,把压缩后的数据存放到baos中
    303                     bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);
    304                     options -= 10;//每次都减少10
    305                 }
    306 
    307                 File file = new File(Environment.getExternalStorageDirectory(), "load3.jpg");
    308                 FileOutputStream out = new FileOutputStream(file);
    309                 out.write(baos.toByteArray());
    310                 out.close();
    311                 baos.close();
    312                 String filePath = file.getPath();
    313                 e.onNext(filePath);
    314             }
    315         })
    316                 .subscribeOn(Schedulers.io())
    317                 .observeOn(AndroidSchedulers.mainThread())
    318                 .subscribe(new Consumer<String>() {
    319                     @Override
    320                     public void accept(String path) throws Exception {
    321                         tvOld.setText("原始大小:" + contentLength + "kb");
    322                         File file = new File(path);
    323                         int fileLenth = (int) (file.length() / 1024);
    324                         tv.setText("保存后大小:" + fileLenth + "kb");
    325                         Bitmap bitmap = BitmapFactory.decodeFile(path);
    326 
    327                         int byteCount = bitmap.getByteCount() / 1024;
    328                         tv3.setText("加载到内存的大小:" + byteCount);
    329                         iv.setImageBitmap(bitmap);
    330                     }
    331                 });
    332     }
    333 
    334     private void load2() {
    335         Observable.create(new ObservableOnSubscribe<String>() {
    336             @Override
    337             public void subscribe(ObservableEmitter<String> e) throws Exception {
    338                 ResponseBody body = new Retrofit.Builder()
    339                         .baseUrl(baseUrl)
    340                         .build()
    341                         .create(NetServerInterface.class)
    342                         .getBitmap(IMG_URL_1)
    343                         .execute()
    344                         .body();
    345                 contentLength = (int) body.contentLength() / 1024;
    346                 InputStream stream = body
    347                         .byteStream();
    348                 //压缩100,图片并将Bitmap保存到本地
    349                 Bitmap bitmap = BitmapFactory.decodeStream(stream);
    350                 File file = new File(Environment.getExternalStorageDirectory(), "load2.jpg");
    351                 FileOutputStream out = new FileOutputStream(file);
    352                 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    353                 String filePath = file.getPath();
    354                 e.onNext(filePath);
    355             }
    356         })
    357                 .subscribeOn(Schedulers.io())
    358                 .observeOn(AndroidSchedulers.mainThread())
    359                 .subscribe(new Consumer<String>() {
    360                     @Override
    361                     public void accept(String path) throws Exception {
    362                         tvOld.setText("原始大小:" + contentLength + "kb");
    363                         File file = new File(path);
    364                         int fileLenth = (int) (file.length() / 1024);
    365                         tv.setText("保存后大小:" + fileLenth + "kb");
    366                         Bitmap bitmap = BitmapFactory.decodeFile(path);
    367                         int byteCount = bitmap.getByteCount() / 1024;
    368                         tv3.setText("加载到内存的大小:" + byteCount);
    369                         iv.setImageBitmap(bitmap);
    370                     }
    371                 });
    372     }
    373 
    374     private void load1() {
    375         Observable.create(new ObservableOnSubscribe<String>() {
    376             @Override
    377             public void subscribe(ObservableEmitter<String> e) throws Exception {
    378                 ResponseBody body = new Retrofit.Builder()
    379                         .baseUrl(baseUrl)
    380                         .build()
    381                         .create(NetServerInterface.class)
    382                         .getBitmap(IMG_URL_1)
    383                         .execute()
    384                         .body();
    385                 contentLength = (int) body.contentLength() / 1024;
    386                 InputStream stream = body
    387                         .byteStream();
    388                 //压缩图片并将Bitmap保存到本地
    389 //                Bitmap bitmap = BitmapFactory.decodeStream(stream);
    390 //                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    391                 File file = new File(Environment.getExternalStorageDirectory(), "load1.jpg");
    392                 FileOutputStream out = new FileOutputStream(file);
    393                 out.write(body.bytes());
    394                 out.close();
    395                 String filePath = file.getPath();
    396                 e.onNext(filePath);
    397             }
    398         })
    399                 .subscribeOn(Schedulers.io())
    400                 .observeOn(AndroidSchedulers.mainThread())
    401                 .subscribe(new Consumer<String>() {
    402                     @Override
    403                     public void accept(String path) throws Exception {
    404                         tvOld.setText("原始大小:" + contentLength + "kb");
    405                         File file = new File(path);
    406                         int fileLenth = (int) (file.length() / 1024);
    407                         tv.setText("保存后大小:" + fileLenth + "kb");
    408                         Bitmap bitmap = BitmapFactory.decodeFile(path);
    409                         int byteCount = bitmap.getByteCount() / 1024;
    410                         tv3.setText("加载到内存的大小:" + byteCount);
    411                         iv.setImageBitmap(bitmap);
    412                     }
    413                 });
    414     }
    415 
    416     private void load0() {
    417         Observable
    418                 .create(new ObservableOnSubscribe<Bitmap>() {
    419                     @Override
    420                     public void subscribe(ObservableEmitter<Bitmap> e) throws Exception {
    421                         Response<ResponseBody> response = new Retrofit.Builder()
    422                                 .baseUrl(baseUrl)
    423                                 .build()
    424                                 .create(NetServerInterface.class)
    425                                 .getBitmap(IMG_URL_0)
    426                                 .execute();
    427                         contentLength = (int) (response.body().contentLength() / 1024);
    428                         InputStream stream = response.body().byteStream();
    429                         Bitmap bitmap = BitmapFactory.decodeStream(stream);
    430                         e.onNext(bitmap);
    431                     }
    432                 }).subscribeOn(Schedulers.io())
    433                 .observeOn(AndroidSchedulers.mainThread())
    434                 .subscribe(new Consumer<Bitmap>() {
    435                     @Override
    436                     public void accept(Bitmap bitmap) throws Exception {
    437                         tvOld.setText("原图片大小为:" + contentLength + "kb");
    438                         iv.setImageBitmap(bitmap);
    439                     }
    440                 });
    441     }
    442 
    443     protected Button btn;
    444     protected TextView tv;
    445     protected ImageView iv;
    446 
    447     @Override
    448     protected void onCreate(Bundle savedInstanceState) {
    449         super.onCreate(savedInstanceState);
    450         super.setContentView(R.layout.activity_main);
    451         initView();
    452     }
    453 
    454     @Override
    455     public void onClick(View view) {
    456         if (view.getId() == R.id.btn) {
    457             showList();
    458         }
    459     }
    460 
    461 
    462     private void initView() {
    463         btn = (Button) findViewById(R.id.btn);
    464         btn.setOnClickListener(MainActivity.this);
    465         tv = (TextView) findViewById(R.id.tv);
    466         iv = (ImageView) findViewById(R.id.iv);
    467         tvOld = (TextView) findViewById(R.id.tv_old);
    468         tv3 = (TextView) findViewById(R.id.tv3);
    469     }
    470 }

    BecomeActivity:

     1 public class BecomeActivity extends AppCompatActivity implements View.OnClickListener {
     2 
     3     protected Button btn;
     4     protected ImageView iv;
     5     private String IMG_URL_0 = "http://zhanhui.3158.cn/data/attachment/exhibition/data/attachment/exhibition/article/2016/02/17/0d6437a313155f933c13971a0ba22cf4.jpg";
     6     private String IMG_URL_1 = "http://img2015.zdface.com/20171115/89eef31e783ccd13f2cdf12ab04298e3.jpg";
     7     private String IMG_URL_2 = "http://img003.21cnimg.com/photos/album/20161114/m600/6CDB31F812CC273DD89E4AA58594A217.jpeg";
     8     private String IMG_URL_3 = "http://p0.so.qhimgs1.com/t0195918c00ff0b8c1c.jpg";
     9     private String IMG_URL_4 = "http://himg2.huanqiu.com/attachment2010/2016/1026/15/06/20161026030615719.jpg";
    10 
    11     @Override
    12     protected void onCreate(Bundle savedInstanceState) {
    13         super.onCreate(savedInstanceState);
    14         super.setContentView(R.layout.activity_become);
    15         initView();
    16     }
    17 
    18     @Override
    19     public void onClick(View view) {
    20         if (view.getId() == R.id.btn) {
    21             showDialog();
    22         }
    23     }
    24 
    25     private void showDialog() {
    26         DialogUtil.showListDialog(this, "图片的形状的变换!", new String[]{
    27                 "0,将图像剪切成圆",
    28                 "1,将图像剪切成三角形",
    29                 "2,将图像剪切成多角形",
    30                 "3,将图像剪切成曲线形",
    31                 "4,将图像剪切成圆角形",
    32         }, new DialogInterface.OnClickListener() {
    33             @Override
    34             public void onClick(DialogInterface dialog, int which) {
    35                 switch (which) {
    36                     case 0:
    37                         Glide.with(BecomeActivity.this)
    38                                 .load(IMG_URL_0)
    39                                 .apply(RequestOptions.bitmapTransform(new CropCircleTransformation()))
    40                                 .into(iv);
    41                         break;
    42                     case 1:
    43                         MultiTransformation<Bitmap> transformation
    44                                 = new MultiTransformation<>(new CenterCrop(), new MaskTransformation(R.mipmap.mask_trangle));
    45 
    46                         Glide.with(BecomeActivity.this)
    47                                 .load(IMG_URL_1)
    48                                 .apply(bitmapTransform(transformation))
    49                                 .into(iv);
    50                         break;
    51                     case 2:
    52                         Glide.with(BecomeActivity.this)
    53                                 .load(IMG_URL_2)
    54                                 .apply(bitmapTransform(new MultiTransformation<>(new CenterCrop(), new MaskTransformation(R.mipmap.mask_starfish))))
    55                                 .into(iv);
    56                         break;
    57                     case 3:
    58                         Glide.with(BecomeActivity.this)
    59                                 .load(IMG_URL_3)
    60                                 .apply(bitmapTransform(new MultiTransformation<>(new CenterCrop(), new MaskTransformation(R.drawable.mask_chat_right))))
    61                                 .into(iv);
    62                         break;
    63                     case 4:
    64                         Glide.with(BecomeActivity.this)
    65                             .load(IMG_URL_4)
    66                             .apply(bitmapTransform(new RoundedCornersTransformation(45, 0,
    67                                     RoundedCornersTransformation.CornerType.BOTTOM)))
    68                             .into(iv);
    69                     break;
    70                 }
    71             }
    72       });
    73     }
    74 
    75     private void initView() {
    76         btn = (Button) findViewById(R.id.btn);
    77         btn.setOnClickListener(BecomeActivity.this);
    78         iv = (ImageView) findViewById(R.id.iv);
    79     }
    80 }

    NetServerInterface:

    1 public interface NetServerInterface {
    2 
    3     @GET
    4     Call<ResponseBody> getBitmap(@Url String url);
    5 }

    StartActivity:

     1 public class StartActivity extends AppCompatActivity implements View.OnClickListener {
     2 
     3     protected Button btnBitmap;
     4     protected Button btnBecome;
     5 
     6     @Override
     7     protected void onCreate(Bundle savedInstanceState) {
     8         super.onCreate(savedInstanceState);
     9         super.setContentView(R.layout.activity_start);
    10         initView();
    11     }
    12 
    13     @Override
    14     public void onClick(View view) {
    15         if (view.getId() == R.id.btn_bitmap) {
    16             startActivity(new Intent(this,MainActivity.class));
    17         } else if (view.getId() == R.id.btn_become) {
    18             startActivity(new Intent(this,BecomeActivity.class));
    19         }
    20     }
    21 
    22     private void initView() {
    23         btnBitmap = (Button) findViewById(R.id.btn_bitmap);
    24         btnBitmap.setOnClickListener(StartActivity.this);
    25         btnBecome = (Button) findViewById(R.id.btn_become);
    26         btnBecome.setOnClickListener(StartActivity.this);
    27     }
    28 }
  • 相关阅读:
    机器学习技法2-Dual Support Vector Machine
    机器学习技法1-Linear Support Vector Machine
    Section 2.2
    Section 2.1 专题乱乱的
    Section 1.5 也许这才是暴力搜索
    usaco生成器
    Section 1.4 搜索
    Section 1.3
    Section 1.2.5 Dual Palindromes 水
    Section 1.2.4 Palindromic Squares 大水
  • 原文地址:https://www.cnblogs.com/SongYongQian/p/8067467.html
Copyright © 2020-2023  润新知