MediaPlay常用方法及音乐和视频的播放

一、MediaPlaydd 常用方法

1.setDataSource(String path) 通过一个路径来设置资源 可以是本地资源或网络资源
2.getDuration 获取文件的总时间
3.getCurrentPosition 获取当前播放的位置
4.isPlay 判断是否在播放中
5. pause 暂停
6. start 开始
7. stop 停止
8. prepare 同步方式准备资源
9. prepareAsync 异步方式加载资源
10.reset 重置MediaPlay 初始化
11.release 回收资源
12 seekTo 指定播放的位置
13 setOnPreparedListener 当准备完成后 设置此监听调用start方法
14setOnCompletionListener 当视频或音频播放完后调用此监听

// 注意 一个应用中保证仅有一个mediaplay对象

public class MediaPlayUtils {
    
    

    MediaPlayer mediaPlayer;
    private MediaPlayUtils() {
    
    

        mediaPlayer=new MediaPlayer();
    }

    public  static MediaPlayUtils mediaPlayUtils;

    public static MediaPlayUtils getInstance(){
    
    
        if(mediaPlayUtils==null){
    
    
            synchronized (String.class){
    
    
                if(mediaPlayUtils==null){
    
    
                    mediaPlayUtils=new MediaPlayUtils();
                }

            }

        }
        return mediaPlayUtils;
    }
使用单例来创建 Mediaplay 对象

二、使用Mediaplay 播放音乐

1.实体类Bean

public class Bean {
    
    
    private String title;
    private String artist;
    private String data;
    private int type;

    public Bean(String title, String artist, String data, int type) {
    
    
        this.title = title;
        this.artist = artist;
        this.data = data;
        this.type = type;
    }

    public int getType() {
    
    
        return type;
    }

    public void setType(int type) {
    
    
        this.type = type;
    }

    public String getTitle() {
    
    
        return title;
    }

    public void setTitle(String title) {
    
    
        this.title = title;
    }

    public String getArtist() {
    
    
        return artist;
    }

    public void setArtist(String artist) {
    
    
        this.artist = artist;
    }

    public String getData() {
    
    
        return data;
    }

    public void setData(String data) {
    
    
        this.data = data;
    }

RecyclerView 万能适配器及Holder

public abstract class BaseRvAdpt<T> extends RecyclerView.Adapter<BaseRvHodler> {
    
    

    ArrayList<T> list;
    Context context;
    ArrayList<Integer> list1 = new ArrayList<>();


    OnClickListener listener;

    public void setListener(OnClickListener listener) {
    
    
        this.listener = listener;
    }

    public BaseRvAdpt(ArrayList<T> list, Context context, Integer...integers) {
    
    
        this.list = list;
        this.context = context;
        for (int i=0;i<integers.length;i++){
    
    
            list1.add(integers[i]);
        }
    }

    @Override
    public int getItemViewType(int position) {
    
    
        return settype(position);
    }
    public  abstract int settype(int position);

    @NonNull
    @Override
    public BaseRvHodler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    
    
        return new BaseRvHodler(LayoutInflater.from(context).inflate(list1.get(i),viewGroup,false));
    }

    @Override
    public void onBindViewHolder(@NonNull BaseRvHodler baseRvHodler, final int i) {
    
    

        bind(baseRvHodler,i);

        baseRvHodler.itemView.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                listener.setOnclick(i);
            }
        });

    }
    public abstract void bind(BaseRvHodler baseRvHodler, int i);

    @Override
    public int getItemCount() {
    
    
        return list.size();
    }
}
public class BaseRvHodler extends RecyclerView.ViewHolder {
    
    

    SparseArray<View> array = new SparseArray<>();

    public BaseRvHodler(@NonNull View itemView) {
    
    
        super(itemView);

    }


    public View getView(int id){
    
    

        View view = array.get(id);
        if(view==null){
    
    
            view=itemView.findViewById(id);
        }

        return view;
    }

    public void setText(int id,String path){
    
    
        TextView view = (TextView) getView(id);
        view.setText(path);

    }
}

MediaPlayUtils工具类的封装

public class MediaplayUtils  {
    
    
    public static final int MODE_DANQU=0;
    public static final int MODE_SHUNXU=1;
    public static final int MODE_SUIJI=2;
    MediaPlayer mediaPlayer;
    ArrayList<Bean> list;
    int count=0;
    int mode=0;
    private MediaplayUtils() {
    
    
        mediaPlayer=new MediaPlayer();
        try {
    
    
            mediaPlayer.setDataSource("/mnt/shell/emulated/0/Music/G.E.M. 邓紫棋 - 后会无期 [mqms2].mp3");
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
    
            @Override
            public void onPrepared(MediaPlayer mp) {
    
    
               mediaPlayer.seekTo(1000);
            }
        });
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }


        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    
    
            @Override
            public void onCompletion(MediaPlayer mp) {
    
    

                switch (mode){
    
    
                    case MODE_DANQU:
                        play(count);
                        break;
                    case MODE_SHUNXU:
                        next();
                        break;
                    case MODE_SUIJI:
                        int v = (int) (Math.random() * list.size());
                        play(v);
                        break;
                }
            }
        });
    }

    public  static MediaplayUtils mediaplayUtils;

    public static MediaplayUtils getInstance(){
    
    
        if(mediaplayUtils==null){
    
    
            synchronized (String.class){
    
    
                if(mediaplayUtils==null){
    
    
                    mediaplayUtils=new MediaplayUtils();
                }
            }

        }
        return mediaplayUtils;
    }

    public void list(ArrayList list){
    
    
        this.list = list;

    }

    public void start(){
    
    
        if(mediaPlayer!=null){
    
    
            mediaPlayer.start();
        }

    }

    public void play(int position){
    
    
       if(mediaPlayer!=null){
    
    
           mediaPlayer.reset();
           try {
    
    
               mediaPlayer.setDataSource(list.get(position).getData());
               mediaPlayer.prepare();
               mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
    
                   @Override
                   public void onPrepared(MediaPlayer mp) {
    
    
                       mediaPlayer.start();
                   }
               });
           } catch (IOException e) {
    
    
               e.printStackTrace();
           }
           count=position;
       }


    }

    public void panse(){
    
    
        if(mediaPlayer!=null){
    
    
            mediaPlayer.pause();
        }
    }

    public void pre(){
    
    
        if(mediaPlayer!=null){
    
    
            if(count==0){
    
    
                count=list.size()-1;
            }else{
    
    
                count--;
            }
            play(count);
        }
    }
    public void next(){
    
    
        if(mediaPlayer!=null){
    
    
            if(count==list.size()-1){
    
    
                count=0;
            }else{
    
    
                count++;
            }
            play(count);
        }
    }

    public void seekbar(int position){
    
    
        if(mediaPlayer!=null) {
    
    
            mediaPlayer.seekTo(position);
        }

    }

    public long getDuction(){
    
    
        if(mediaPlayer!=null) {
    
    
            return mediaPlayer.getDuration();
        }
        return 0;
    }
    public long getCurr(){
    
    
        if(mediaPlayer!=null) {
    
    
            return mediaPlayer.getCurrentPosition();
        }
        return 0;
    }
    public int modes(){
    
    
        if(mode==0){
    
    
            mode=1;
        }else if(mode==1){
    
    
            mode=2;
        }else if(mode==2){
    
    
            mode=0;
        }
        return mode;

    }
}

使用内容提供者获取数据及点击item播放音乐

public class MainActivity extends AppCompatActivity implements OnClickListener {
    
    

    RecyclerView rv;
    SeekBar seekBar;
    ImageView mode,next,pre;
    CheckBox play;
    ArrayList<Bean> list = new ArrayList<>();
    BaseRvAdpt<Bean> beanBaseRvAdpt;
    TextView start,end;



    @SuppressLint("HandlerLeak")
    Handler handler=new Handler(){
    
    
        @Override
        public void handleMessage(Message msg) {
    
    
            super.handleMessage(msg);
            if(msg.what==1100){
    
    
                long duction = MediaplayUtils.getInstance().mediaPlayer.getDuration();
                long curr = MediaplayUtils.getInstance().mediaPlayer.getCurrentPosition();
                Log.d("ytx", "handleMessage: "+duction);
                if(duction>0){
    
    
                    seekBar.setMax((int) duction);
                    seekBar.setProgress((int) curr);
                    SimpleDateFormat format = new SimpleDateFormat("mm:ss");
                    String format1 = format.format(curr);
                    String format2 = format.format(duction);
                    end.setText(format2);
                    start.setText(format1);
                }



            }
        }
    };


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

        String[] s=new String[]{
    
    Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.INTERNET};

        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
    
      //动态获取SKD
            for (int i=0;i<s.length;i++){
    
    
                int permission = ActivityCompat.checkSelfPermission(this, s[i]);
                if(permission== PackageManager.PERMISSION_DENIED){
    
    
                    requestPermissions(s,101);
                    break;
                }

            }

        }

        rv=findViewById(R.id.rv);
        seekBar=findViewById(R.id.seekbar);
        mode=findViewById(R.id.mode);
        play=findViewById(R.id.img_play);
        next=findViewById(R.id.img_next);
        pre=findViewById(R.id.img_pre);

        start=findViewById(R.id.starttime);
        end=findViewById(R.id.endtime);


        ContentResolver resolver = getContentResolver();
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Cursor query = resolver.query(uri, null, null, null, null);

        while(query.moveToNext()){
    
    
            String title = query.getString(query.getColumnIndex(MediaStore.Audio.Media.TITLE));
            String artist = query.getString(query.getColumnIndex(MediaStore.Audio.Media.ARTIST));
            String data = query.getString(query.getColumnIndex(MediaStore.Audio.Media.DATA));
            Bean bean = new Bean(title, artist, data,0);
            list.add(bean);
        }


        beanBaseRvAdpt = new BaseRvAdpt<Bean>(list, MainActivity.this,R.layout.layout1) {
    
    
            @Override
            public int settype(int position) {
    
    
                return list.get(position).getType();
            }

            @Override
            public void bind(BaseRvHodler baseRvHodler, int i) {
    
    
                baseRvHodler.setText(R.id.titles,list.get(i).getTitle());
                baseRvHodler.setText(R.id.sings,list.get(i).getArtist());
            }
        };

        beanBaseRvAdpt.setListener(this);
        rv.setAdapter(beanBaseRvAdpt);
        intime();
        rv.setLayoutManager(new LinearLayoutManager(this));

        play.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
    
                if(isChecked){
    
    
                    MediaplayUtils.getInstance().start();

                }else{
    
    
                    MediaplayUtils.getInstance().panse();
                }
            }
        });
        next.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                MediaplayUtils.getInstance().next();
            }
        });
        pre.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                MediaplayUtils.getInstance().pre();
            }
        });



        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    
    

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
    
    

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
    
    
                seekBar.setMax((int) MediaplayUtils.getInstance().getDuction());
                int progress = seekBar.getProgress();
                MediaplayUtils.getInstance().seekbar(progress);

            }
        });

        mode.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                int modes = MediaplayUtils.getInstance().modes();
                if(modes==0){
    
    
                    mode.setImageResource(R.mipmap.danquxunhuan);
                }else if(modes==1){
    
    
                    mode.setImageResource(R.mipmap.shunxubofang);
                }else if(modes==2){
    
    
                    mode.setImageResource(R.mipmap.suiji);
                }
            }
        });

    }

    private void intime() {
    
     //实时获取歌进度
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
    
    
            @Override
            public void run() {
    
    
               handler.sendEmptyMessage(1100);
            }
        },0,200);

    }

    @Override
    public void setOnclick(int position) {
    
    
            MediaplayUtils.getInstance().play(position);
    }
}

三、使用Mediaolay视频播放

弹幕实体类

package com.example.as3_day08_work2;

public class Bean1 {

    String mess;
    int x;
    int y;
    int size;
    int postitipn;

    public Bean1(String mess, int x, int y, int size, int postitipn) {
        this.mess = mess;
        this.x = x;
        this.y = y;
        this.size = size;
        this.postitipn = postitipn;
    }

    public int getPostitipn() {
        return postitipn;
    }

    public void setPostitipn(int postitipn) {
        this.postitipn = postitipn;
    }

    public String getMess() {
        return mess;
    }

    public void setMess(String mess) {
        this.mess = mess;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }
}

2.万能适配器及Holder的封装

public abstract class BaseRvAdpt<T> extends RecyclerView.Adapter<BaseRvHodler> {
    
    

    ArrayList<T> list;
    Context context;
    ArrayList<Integer> list1 = new ArrayList<>();


    OnClickListener listener;

    public void setListener(OnClickListener listener) {
    
    
        this.listener = listener;
    }

    public BaseRvAdpt(ArrayList<T> list, Context context, Integer...integers) {
    
    
        this.list = list;
        this.context = context;
        for (int i=0;i<integers.length;i++){
    
    
            list1.add(integers[i]);
        }
    }

    @Override
    public int getItemViewType(int position) {
    
    
        return settype(position);
    }
    public  abstract int settype(int position);

    @NonNull
    @Override
    public BaseRvHodler onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    
    
        return new BaseRvHodler(LayoutInflater.from(context).inflate(list1.get(i),viewGroup,false));
    }

    @Override
    public void onBindViewHolder(@NonNull BaseRvHodler baseRvHodler, final int i) {
    
    

        bind(baseRvHodler,i);

        baseRvHodler.itemView.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                listener.setOnclick(i);
            }
        });

    }
    public abstract void bind(BaseRvHodler baseRvHodler, int i);

    @Override
    public int getItemCount() {
    
    
        return list.size();
    }
}
public class BaseRvHodler extends RecyclerView.ViewHolder {
    
    

    SparseArray<View> array = new SparseArray<>();

    public BaseRvHodler(@NonNull View itemView) {
    
    
        super(itemView);

    }


    public View getView(int id){
    
    

        View view = array.get(id);
        if(view==null){
    
    
            view=itemView.findViewById(id);
        }

        return view;
    }

    public void setText(int id,String path){
    
    
        TextView view = (TextView) getView(id);
        view.setText(path);
    }

    public void setimg(int id,String path){
    
    
        ImageView view = (ImageView) getView(id);
        Glide.with(itemView).load(path).into(view);
    }
}

3.Mediaplay封装

public class MediaPlayUtils {
    
    

    MediaPlayer mediaPlayer;
    private MediaPlayUtils() {
    
    

        mediaPlayer=new MediaPlayer();
    }

    public  static MediaPlayUtils mediaPlayUtils;

    public static MediaPlayUtils getInstance(){
    
    
        if(mediaPlayUtils==null){
    
    
            synchronized (String.class){
    
    
                if(mediaPlayUtils==null){
    
    
                    mediaPlayUtils=new MediaPlayUtils();
                }

            }

        }
        return mediaPlayUtils;
    }

    public void play(String path){
    
    
        if(mediaPlayer!=null){
    
    
            mediaPlayer.reset();
            try {
    
    
                mediaPlayer.setDataSource(path);
                mediaPlayer.prepareAsync();
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
    
                    @Override
                    public void onPrepared(MediaPlayer mp) {
    
    
                        mediaPlayer.start();
                    }
                });
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }

        }

    }

    public void paunu(){
    
    
        if(mediaPlayer!=null){
    
    
            mediaPlayer.pause();
        }

    }
    public void start(){
    
    
        if(mediaPlayer!=null){
    
    
            mediaPlayer.start();
        }
    }
    public long getDution(){
    
    
        return  mediaPlayer.getDuration();
    }

    public long getCurr(){
    
    

        return mediaPlayer.getCurrentPosition();
    }

    public void seekto(int position){
    
    
        mediaPlayer.seekTo(position);

    }

    public float kuai(float xx,int width){
    
    
        long dution = getDution(); //总时长
        long curr = getCurr();//当前
        float v = curr + xx * dution / width;
        return v;
    }

    public float tui(float xx,int width){
    
    
        long dution = getDution(); //总时长
        long curr = getCurr();//当前
        float v = curr - xx * dution / width;
        return v;
    }



}

4.主页面

public class Main2Activity extends AppCompatActivity implements SurfaceHolder.Callback {
    
    

    SurfaceView svf,svf_danmu;
    CheckBox checkBox;
    TextView starttime,endtime;
    SeekBar seekBar;
    ImageView quanping;
    SurfaceHolder holder1;
    RelativeLayout rv;
    int count=0;
    int width;
    EditText editText_mess;
    Button btn_send;
    SurfaceHolder holder_dm;
    ArrayList<Bean1> list = new ArrayList<>();

    @SuppressLint("HandlerLeak")
    Handler handler=new Handler(){
    
    
        @Override
        public void handleMessage(Message msg) {
    
    
            super.handleMessage(msg);
            if(msg.what==100){
    
    

                long dution = MediaPlayUtils.getInstance().getDution();
                long curr = MediaPlayUtils.getInstance().getCurr();
                SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
                String format = sdf.format(dution);
                String format1 = sdf.format(curr);
                starttime.setText(format1);
                endtime.setText(format);

                seekBar.setMax((int) dution);
                seekBar.setProgress((int) curr);

            }
        }
    };
    float x,x1;

    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        svf=findViewById(R.id.sfvs);
        checkBox=findViewById(R.id.play);
        starttime=findViewById(R.id.starttime);
        endtime=findViewById(R.id.endtime);
        seekBar=findViewById(R.id.seekbar);
        quanping=findViewById(R.id.quanping);
        rv=findViewById(R.id.rv);

        svf_danmu=findViewById(R.id.sfv_dm);
        editText_mess=findViewById(R.id.ed_mess);
        btn_send=findViewById(R.id.btn_send);

        holder_dm = svf_danmu.getHolder();
        holder_dm.addCallback(this);

        btn_send.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                String trim = editText_mess.getText().toString().trim();
                int v1 = (int) (Math.random() * 200);
                int v2 = (int) (Math.random() * 200);
                Bean1 bean1 = new Bean1(trim,v1,v2,15,20);
                list.add(bean1);
            }
        });



        this.holder1 = svf.getHolder();

         svf.setOnTouchListener(new View.OnTouchListener() {
    
    
             @Override
             public boolean onTouch(View v, MotionEvent event) {
    
    
                 int action = event.getAction();
                 switch (action){
    
    
                     case MotionEvent.ACTION_DOWN:
                          x = event.getX();
                         if(count%2==0){
    
    
                             rv.setVisibility(View.VISIBLE);
                             count++;
                         }else{
    
    
                             rv.setVisibility(View.GONE);
                             count++;
                         }
                         break;
                     case MotionEvent.ACTION_UP:
                         x1 = event.getX();
                         float v1 = x1 - x;
                         if(x1>x){
    
    
                             kuaijin(v1);
//                             float kuai = MediaPlayUtils.getInstance().kuai(v1, width);
//                                MediaPlayUtils.getInstance().seekto((int) kuai);
                         }else{
    
    
//                             float tui = MediaPlayUtils.getInstance().tui(v1, width);
//                             MediaPlayUtils.getInstance().seekto((int) tui);
                             houtui(v1);
                         }

                         break;

                 }

                 return true;
             }

             private void houtui(float v1) {
    
    
                 long curr = MediaPlayUtils.getInstance().getCurr();
                 long dution = MediaPlayUtils.getInstance().getDution();
                 int width = getWindowManager().getDefaultDisplay().getWidth();
                 MediaPlayUtils.getInstance().seekto((int) (curr-v1*dution/width));
             }

             private void kuaijin(float v1) {
    
    
                 long curr = MediaPlayUtils.getInstance().getCurr();
                 long dution = MediaPlayUtils.getInstance().getDution();
                 int width = getWindowManager().getDefaultDisplay().getWidth();
                 MediaPlayUtils.getInstance().seekto((int) (curr+v1*dution/width));

             }
         });



        quanping.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                if(getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE){
    
    
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }else if(getResources().getConfiguration().orientation== Configuration.ORIENTATION_PORTRAIT){
    
    
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
            }
        });



        this.holder1.addCallback(this);

        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    
    
                if(isChecked){
    
    
                    MediaPlayUtils.getInstance().paunu();
                }else{
    
    
                    MediaPlayUtils.getInstance().start();
                }
            }
        });




        inttime();


        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    
    

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
    
    

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
    
    

                MediaPlayUtils.getInstance().seekto(seekBar.getProgress());
            }
        });

        svf_danmu.setZOrderOnTop(true);
        holder_dm.setFormat(PixelFormat.TRANSPARENT);




    }

    private void inttime() {
    
    
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
    
    
            @Override
            public void run() {
    
    
                handler.sendEmptyMessage(100);
            }
        },0,500);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    
    
            if(holder1==holder){
    
    
                MediaPlayUtils.getInstance().mediaPlayer.setDisplay(holder);
                Intent intent = getIntent();
                String mp4 = intent.getStringExtra("mp4");
                MediaPlayUtils.getInstance().play(mp4);
            }

           else  if(holder_dm==holder){
    
    
                new Threads().start();
            }


    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    
    

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    
    

    }

    class Threads extends Thread{
    
    
        @Override
        public void run() {
    
    

            Paint paint = new Paint();
            paint.setStrokeWidth(2);
            paint.setColor(Color.BLUE);
            paint.setTextSize(50);

            while (true){
    
    
                try {
    
    
                    Thread.sleep(20);
                } catch (InterruptedException e) {
    
    
                    e.printStackTrace();
                }

                Canvas canvas = holder_dm.lockCanvas();
                if(canvas==null){
    
    
                    break;
                }
                canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
                for(int i=0;i<list.size();i++){
    
    
                    String mess = list.get(i).getMess();
                    int x = list.get(i).getX();
                    int y = list.get(i).getY();
                    list.get(i).setX(list.get(i).postitipn+x);
                    canvas.drawText(mess,list.get(i).getX(),y,paint);
                }
                holder_dm.unlockCanvasAndPost(canvas);


            }

        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43841463/article/details/95722706