黑马Android76期学习笔记01基础--day10--获取手机的分辨率,获取图片尺寸、缩放比、副本、常用绘图API、MediaPlayer,surfaceView,videoView,照相、录像

1.获取手机的分辨率

MainActivity
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
private String permssionRequestCode []={Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS};

private ImageView myimg;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ActivityCompat.requestPermissions(this, permssionRequestCode,0);
    ActivityCompat.requestPermissions(this, permssionRequestCode,1);
    ActivityCompat.requestPermissions(this, permssionRequestCode,2);
    myimg=findViewById(R.id.myImg);

    //获取手机的分辨率windowManager,smsManager,TelephoneManger
    WindowManager windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
    /*
    int height=windowManager.getDefaultDisplay().getHeight();//获取高
    int width=windowManager.getDefaultDisplay().getWidth();
    */
    Point point=new Point();
    windowManager.getDefaultDisplay().getSize(point);
    int width=point.x;
    int height=point.y;
    Log.d("TAG", "width: "+width+"---"+"height: "+height);

}

public void btnclick(View view){
    Bitmap bitmap=BitmapFactory.decodeFile("/mnt/sdcard/Download/timg.jpeg");
    myimg.setImageBitmap(bitmap);
}

}
打印
2020-08-25 17:53:46.804 18414-18414/com.fengray.ex079 D/TAG: width: 1080—height: 1776

2.获取图片的尺寸、分辨率
package com.fengray.ex079;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private String permssionRequestCode []={Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS};

    private ImageView myimg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityCompat.requestPermissions(this, permssionRequestCode,0);
        ActivityCompat.requestPermissions(this, permssionRequestCode,1);
        ActivityCompat.requestPermissions(this, permssionRequestCode,2);
        myimg=findViewById(R.id.myImg);

        //获取手机的分辨率windowManager,smsManager,TelephoneManger
        WindowManager windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
        /*
        int height=windowManager.getDefaultDisplay().getHeight();//获取高
        int width=windowManager.getDefaultDisplay().getWidth();
        */
        Point point=new Point();
        windowManager.getDefaultDisplay().getSize(point);
        int width=point.x;
        int height=point.y;
        Log.d("TAG", "width: "+width+"---"+"height: "+height);

    }
    @SuppressLint("SdCardPath")
    public void btnclick(View view){
        //创建一个位图工厂的配置参数
        BitmapFactory.Options options=new BitmapFactory.Options();
        //解码器不去真正地解析位图,但是还能获取图片的宽和高的信息
        options.inJustDecodeBounds=true;
        BitmapFactory.decodeFile("/mnt/sdcard/Download/timg.jpeg",options);
        //myimg.setImageBitmap(bitmap);

        //获取图片的宽和高信息
        int imgWidth=options.outWidth;
        int imgHeight=options.outHeight;
        Log.d("TAG", "图片宽:width: "+imgWidth+"---"+"图片高:height: "+imgHeight);

        //Log.d("TAG", "btnclick: "+bitmap);
    }
}
3.获取图片缩放比
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private String permssionRequestCode []={Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS};

    private ImageView myimg;
    int width,height;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityCompat.requestPermissions(this, permssionRequestCode,0);
        ActivityCompat.requestPermissions(this, permssionRequestCode,1);
        ActivityCompat.requestPermissions(this, permssionRequestCode,2);
        myimg=findViewById(R.id.myImg);

        //获取手机的分辨率windowManager,smsManager,TelephoneManger
        WindowManager windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
        /*
        int height=windowManager.getDefaultDisplay().getHeight();//获取高
        int width=windowManager.getDefaultDisplay().getWidth();
        */
        Point point=new Point();
        windowManager.getDefaultDisplay().getSize(point);
        width=point.x;
        height=point.y;
        Log.d("TAG", "width: "+width+"---"+"height: "+height);

    }
    @SuppressLint("SdCardPath")
    public void btnclick(View view){
        //创建一个位图工厂的配置参数
        BitmapFactory.Options options=new BitmapFactory.Options();
        //解码器不去真正地解析位图,但是还能获取图片的宽和高的信息
        options.inJustDecodeBounds=true;
        BitmapFactory.decodeFile("/mnt/sdcard/Download/timg.jpeg",options);
        //myimg.setImageBitmap(bitmap);

        //获取图片的宽和高信息
        int imgWidth=options.outWidth;
        int imgHeight=options.outHeight;
        Log.d("TAG", "图片宽:width: "+imgWidth+"---"+"图片高:height: "+imgHeight);

        //计算缩放比,按照大的缩放比来
        int scale=1;
        int scaleX=imgWidth/width;
        int scaleY=imgHeight/height;
        if (scaleX>=scaleY && scaleX>scale){
            scale=scaleX;
        }
        if (scaleY<scaleX && scaleY>scale){
            scale=scaleY;
        }

        //按照缩放比进行显示,实际按照缩放比采样
        options.inSampleSize=scale;
        //按照缩放比解析位图
        //false则解码器真正地解析位图,但是还能获取图片的宽和高的信息
        options.inJustDecodeBounds=true;
        Bitmap bitmap=BitmapFactory.decodeFile("/mnt/sdcard/Download/timg.jpeg",options);
        myimg.setImageBitmap(bitmap);

        //Log.d("TAG", "btnclick: "+bitmap);
    }
}
4.获取图片副本
package com.fengray.ex080;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private ImageView myimg1,myimg2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myimg1=findViewById(R.id.myimg1);
        myimg2=findViewById(R.id.myimg2);

        //1把jpg图片转换成bitmap显示到控件上
        Bitmap srcbitmap=BitmapFactory.decodeResource(getResources(),R.drawable.gril02);
        //2操作图片
        //srcbitmap.setPixel(0, 0, Color.RED);
        myimg1.setImageBitmap(srcbitmap);

        //创建原图的副本,创建了一个大小和原图一样的空白的白纸
        Bitmap copybitmap=Bitmap.createBitmap(srcbitmap.getWidth(),srcbitmap.getHeight(),srcbitmap.getConfig());
        //创建一直画笔
        Paint pianter=new Paint();
        //创建一个画布,把白纸铺到画布上
        Canvas canvas=new Canvas(copybitmap);
        //开始作画,参数Matrix是矩阵的意思
        canvas.drawBitmap(srcbitmap,new Matrix(),pianter);
        //操作画出来的图片
        copybitmap.setPixel(0,0,Color.RED);

        //显示到第二个img控件上
        myimg2.setImageBitmap(copybitmap);
    }
}

在这里插入图片描述

5.图形处理的api

1、旋转:

 //创建原图的副本,创建了一个大小和原图一样的空白的白纸
        Bitmap copybitmap=Bitmap.createBitmap(srcbitmap.getWidth(),srcbitmap.getHeight(),srcbitmap.getConfig());
        //创建一直画笔
        Paint pianter=new Paint();
        //创建一个画布,把白纸铺到画布上
        Canvas canvas=new Canvas(copybitmap);
        //开始作画,参数Matrix是矩阵的意思
        Matrix matrix=new Matrix();
        //对图片进行旋转
        matrix.setRotate(20,srcbitmap.getWidth()/2,srcbitmap.getHeight()/2);
        canvas.drawBitmap(srcbitmap,matrix,pianter);
        //操作画出来的图片
        copybitmap.setPixel(0,0,Color.RED);

        //显示到第二个img控件上
        myimg2.setImageBitmap(copybitmap);

2、缩放:

//创建原图的副本,创建了一个大小和原图一样的空白的白纸
        Bitmap copybitmap=Bitmap.createBitmap(srcbitmap.getWidth(),srcbitmap.getHeight(),srcbitmap.getConfig());
        //创建一直画笔
        Paint pianter=new Paint();
        //创建一个画布,把白纸铺到画布上
        Canvas canvas=new Canvas(copybitmap);
        //开始作画,参数Matrix是矩阵的意思
        Matrix matrix=new Matrix();
        //对图片进行旋转
        matrix.setScale(0.5f,0.5f);//两个参数分辨是宽高的缩放倍数
        canvas.drawBitmap(srcbitmap,matrix,pianter);
        //操作画出来的图片
        copybitmap.setPixel(0,0,Color.RED);

        //显示到第二个img控件上
        myimg2.setImageBitmap(copybitmap);

3、平移:

//创建原图的副本,创建了一个大小和原图一样的空白的白纸
        Bitmap copybitmap=Bitmap.createBitmap(srcbitmap.getWidth(),srcbitmap.getHeight(),srcbitmap.getConfig());
        //创建一直画笔
        Paint pianter=new Paint();
        //创建一个画布,把白纸铺到画布上
        Canvas canvas=new Canvas(copybitmap);
        //开始作画,参数Matrix是矩阵的意思
        Matrix matrix=new Matrix();
        //对图片进行平移
        matrix.setTranslate(80f,0.5f);//两个参数分辨是宽高的缩放倍数
        canvas.drawBitmap(srcbitmap,matrix,pianter);
        //操作画出来的图片
        copybitmap.setPixel(0,0,Color.RED);

        //显示到第二个img控件上
        myimg2.setImageBitmap(copybitmap);

4、镜像:
缩放和平移的一个组合

 //创建原图的副本,创建了一个大小和原图一样的空白的白纸
        Bitmap copybitmap=Bitmap.createBitmap(srcbitmap.getWidth(),srcbitmap.getHeight(),srcbitmap.getConfig());
        //创建一直画笔
        Paint pianter=new Paint();
        //创建一个画布,把白纸铺到画布上
        Canvas canvas=new Canvas(copybitmap);
        //开始作画,参数Matrix是矩阵的意思
        Matrix matrix=new Matrix();
        //对图片进行镜像
        matrix.setScale(-1.0f,1);//负数产生翻转镜像
        //post方法在上一次基础上进行新的操作,set方法,每次都进行全新操作,不保留上次的方法
        matrix.postTranslate(srcbitmap.getWidth(),0);

        canvas.drawBitmap(srcbitmap,matrix,pianter);
        //操作画出来的图片
        copybitmap.setPixel(0,0,Color.RED);

        //显示到第二个img控件上
        myimg2.setImageBitmap(copybitmap);
6.绘图板实例
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class MainActivity extends AppCompatActivity {
    private ImageView myimg;
    private Bitmap scrBitmap,copyBitmap;
    private Paint paint;
    private Canvas canvas;
    private int action;
    private int  startX,startY;
    private String permssionRequestCode []={Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};

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

        ActivityCompat.requestPermissions(this, permssionRequestCode,0);
        ActivityCompat.requestPermissions(this, permssionRequestCode,1);
        //用来显示绘制的内容
        myimg=findViewById(R.id.myimg);

        //获取原图
        scrBitmap= BitmapFactory.decodeResource(getResources(),R.drawable.gril011);
        //获取原图副本,相当于一个空白白纸
        copyBitmap=Bitmap.createBitmap(scrBitmap.getWidth(),scrBitmap.getHeight(),scrBitmap.getConfig());
        //创建空白画笔及画布
        paint=new Paint();
        canvas=new Canvas(copyBitmap);//把白纸放入画布
        //开始作画
        canvas.drawBitmap(scrBitmap,new Matrix(),paint);
        //canvas.drawLine(20,30,50,80,paint);
        //设置在画布上
        myimg.setImageBitmap(copyBitmap);
        //给控件设置一个触摸事件
        myimg.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                action=event.getAction();
                Log.d("TAG", "onTouch: "+action);
                switch (action){
                    //获得当前时间
                    case MotionEvent.ACTION_DOWN:
                        //获取划线起始位置
                        startX=(int)event.getX();
                        startY=(int)event.getY();
                        Log.d("TAG", "onTouch: action down "+startX+"--"+startY);

                        break;
                    case MotionEvent.ACTION_MOVE:
                        //获取结束位置
                        int stopX=(int)event.getX();
                        int stopY=(int)event.getY();
                        Log.d("TAG", "onTouch: action move "+stopX+"--"+stopY);

                       //不停的地划线
                        canvas.drawLine(startX,startY,stopX,stopY,paint);
                        //再显示到控件上
                        myimg.setImageBitmap(copyBitmap);
                        //刷新起点
                        startX=stopX;
                        startY=stopY;
                        break;
                    case MotionEvent.ACTION_UP:
                        break;
                    default:
                        break;
                }
                return true;
            }
        });
    }

    //红色Click
    public void redClick (View view){
        //设定画笔颜色
        paint.setColor(Color.RED);
    }

    //加粗Click
    public void boldClick (View view){
        paint.setStrokeWidth(15);

    }
    //保存Click
    public void saveClick (View view){

        try {
            Log.d("TAG", "saveClick: 11111111");
            File file=new File(Environment.getExternalStorageDirectory().getPath(),"d33.png");
            FileOutputStream fileOutputStream=new FileOutputStream(file);
            Log.d("TAG", "saveClick: 2222222");
            //第一个参数:图片的格式
            //quality:保存图片的质量
            //保存图片的文件流
            copyBitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);

            //发送一条广播,欺骗系统图库的应用
            Intent intent=new Intent();
            //设置action
            intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
            intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
            sendBroadcast(intent);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}
7.撕衣服案例

点击时将衣服图片设置为透明

package com.fengray.ex082;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.media.Image;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private ImageView imgPre,imgAfter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgPre=findViewById(R.id.imgpre);
        //imgAfter=findViewById(R.id.imgafter);

        //获得图片原图
        Bitmap srcbitmap= BitmapFactory.decodeResource(getResources(),R.drawable.girlpre);
        //创建图片副本,与原图大小一致
        final Bitmap copybitmap=Bitmap.createBitmap(srcbitmap.getWidth(),srcbitmap.getHeight(),srcbitmap.getConfig());
        //创建画笔、画布
        Paint paint=new Paint();

        Canvas canvas=new Canvas(copybitmap);
        //开始作画
        canvas.drawBitmap(srcbitmap,new Matrix(),paint);

        imgPre.setImageBitmap(copybitmap);

        imgPre.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d("TAG", "onTouch: ----");
                //具体判断触摸事件
                switch (event.getAction()){

                    case MotionEvent.ACTION_MOVE:
                        Log.d("TAG", "onTouch: ----"+event.getAction());

                        for (int i=-7;i<7; i++){//增加x坐标
                            for (int j=-7;j<7;j++){//增加y坐标
                                copybitmap.setPixel((int)event.getX()+i,(int)event.getY()+j, Color.TRANSPARENT);
                            }
                        }
                        //更新一下控件
                        imgPre.setImageBitmap(copybitmap);
                }
                return true;
            }
        });


    }
}
8.音乐播放MediaPlayer类

用于播放音频或者视频

import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

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

    //点击执行播放
    public void btnPlay(View view){
        //初始化MediaPlayer
        MediaPlayer mediaPlayer=new MediaPlayer();
      try {
            mediaPlayer.setDataSource("/data/media/0/Music/xkfy.mp3");
            //mediaPlayer.setDataSource("http://www.fengray.com/xkfy.mp3");网络播放使用
            mediaPlayer.setLooping(true);
            //准备播放
            mediaPlayer.prepare();
            //开始播放
            mediaPlayer.start();
            //mediaPlayer.prepareAsync();//网络播放使用

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
9.surfaceView控件播放视频
package com.fengray.ex083;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    private String permssionRequestCode []={Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
    private SurfaceView sfv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityCompat.requestPermissions(this, permssionRequestCode,0);
        ActivityCompat.requestPermissions(this, permssionRequestCode,1);
        new Thread(){
            @Override
            public void run() {

                SystemClock.sleep(400);//surfaceView是重量型控件,耗时且内部有两个线程,因此,整个逻辑要放在子线程中实现,
                sfv=findViewById(R.id.mysv);
                //获得surfaceholder对象,用来维护视频内容
                SurfaceHolder holder = sfv.getHolder();
                //初始化MediaPlayer
                MediaPlayer mediaPlayer=new MediaPlayer();
                try {
                    mediaPlayer.setDataSource("http://www.fengray.com/xkfy.mp4");//网络播放使用
                    //准备播放
                    mediaPlayer.prepareAsync();
                    //surfaceholder是用来维护视频播放内容的
                    mediaPlayer.setDisplay(holder);
                    //开始播放
                    mediaPlayer.start();
                    //mediaPlayer.prepareAsync();//网络播放使用

                } catch (IOException e) {
                    e.printStackTrace();
                }
                super.run();
            }
        }.start();

    }
10.videoView控件播放视频

videView是对surfaceView和MediaPlayer的封装

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {
    private VideoView mVideoView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到控件
        mVideoView=findViewById(R.id.videoView);
        //设置播放路径
        mVideoView.setVideoPath("http://www.sina.com/cc.mp4");
    }
}
11.vitamio框架(开源)

12.照相和录像

使用隐式Intent

package com.fengray.ex084;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.hardware.camera2.CaptureRequest;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.VideoView;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    private VideoView mVideoView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void click1(View view){
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file=new File(Environment.getExternalStorageDirectory().getPath(),"name.png");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        startActivityForResult(intent,1 ) ;
    }
    public void click2(View view){
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file=new File(Environment.getExternalStorageDirectory().getPath(),"name.mp4");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        startActivityForResult(intent,2 ) ;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        Log.d("TAG", "onActivityResult: 方法执行了");
        super.onActivityResult(requestCode, resultCode, data);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值