Android學習之----SurfaceView添加MediaPlayer實現視頻播放和彈幕滾動

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

package com.example.app3;


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

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;

import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;

import java.io.IOException;


/**
 * A simple {@link Fragment} subclass.
 */
public class Fragment1 extends Fragment implements SurfaceHolder.Callback{
    private SurfaceView videoMedia;
    SurfaceHolder holder;
    private MediaPlayer mediaPlayer;

    public Fragment1() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View inflate = inflater.inflate(R.layout.fragment_fragment1, container, false);
        videoMedia = inflate.findViewById(R.id.video_media);
        holder = videoMedia.getHolder();

        View viewById = inflate.findViewById(R.id.start_1);
        viewById.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mediaPlayer.start();
            }
        });

        View viewById2 = inflate.findViewById(R.id.stop_2);
        viewById2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mediaPlayer.pause();
            }
        });

        holder.addCallback(this);
        try {
            initPlayer();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return inflate;
    }

    private void initPlayer() throws IOException {
        if (mediaPlayer==null){
            mediaPlayer=new MediaPlayer();
        }
        mediaPlayer.reset();
        mediaPlayer.setDataSource("/mnt/sdcard/嚶嚶嚶.mp4");
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.start();
            }
        });
    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        mediaPlayer.setDisplay(surfaceHolder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        mediaPlayer.release();
        mediaPlayer=null;
    }
}

package com.example.app3;


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

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;

import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;

import java.io.IOException;


/**
 * A simple {@link Fragment} subclass.
 */
public class Fragment1 extends Fragment implements SurfaceHolder.Callback{
    private SurfaceView videoMedia;
    SurfaceHolder holder;
    private MediaPlayer mediaPlayer;

    public Fragment1() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View inflate = inflater.inflate(R.layout.fragment_fragment1, container, false);
        videoMedia = inflate.findViewById(R.id.video_media);
        holder = videoMedia.getHolder();

        View viewById = inflate.findViewById(R.id.start_1);
        viewById.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mediaPlayer.start();
            }
        });

        View viewById2 = inflate.findViewById(R.id.stop_2);
        viewById2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mediaPlayer.pause();
            }
        });

        holder.addCallback(this);
        try {
            initPlayer();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return inflate;
    }

    private void initPlayer() throws IOException {
        if (mediaPlayer==null){
            mediaPlayer=new MediaPlayer();
        }
        mediaPlayer.reset();
        mediaPlayer.setDataSource("/mnt/sdcard/嚶嚶嚶.mp4");
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.start();
            }
        });
    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        mediaPlayer.setDisplay(surfaceHolder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        mediaPlayer.release();
        mediaPlayer=null;
    }
}

package com.example.app3;


import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;


public class Fragment3 extends Fragment implements SurfaceHolder.Callback {

    private SurfaceView surfaceViewId;

    public Fragment3() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View inflate = inflater.inflate(R.layout.fragment_fragment3, container, false);
        surfaceViewId = (SurfaceView) inflate.findViewById(R.id.surfaceView_id);
        SurfaceHolder holder = surfaceViewId.getHolder();
        holder.addCallback(this);
        return inflate;
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setAlpha(100);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(20);
        paint.setTextSize(36);
        Canvas canvas = holder.lockCanvas();

        canvas.drawLine(0,0,96,96,paint);

        canvas.drawOval(100,300,300,500,paint);

        canvas.drawText("呵呵````",100,600,paint);

        holder.unlockCanvasAndPost(canvas);
    }

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

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
}

package com.example.app3;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.content.Context;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.ListView;

import com.bumptech.glide.Glide;
import com.flyco.tablayout.CommonTabLayout;
import com.flyco.tablayout.SlidingTabLayout;
import com.flyco.tablayout.listener.CustomTabEntity;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.Transformer;
import com.youth.banner.listener.OnBannerListener;
import com.youth.banner.loader.ImageLoader;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private Banner banner;
    private SlidingTabLayout commonTab;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getSupportActionBar().hide();

        banner = (Banner) findViewById(R.id.banner);
        commonTab = (SlidingTabLayout) findViewById(R.id.slide_tab2);

//        ArrayList<CustomTabEntity> list=new ArrayList<>();
//        MyEmtity myEmtity = new MyEmtity("賈婷是豬", R.mipmap.b2, R.mipmap.b);
//        list.add(myEmtity);
//
//        list.add(new MyEmtity("賈婷真的是豬豬",R.mipmap.c,R.mipmap.e2));
//        list.add(new MyEmtity("賈婷真的是豬豬俠",R.mipmap.c2,R.mipmap.e));
//        commonTab.setTabData(list);
        ArrayList<Fragment> fragments=new ArrayList<>();
        fragments.add(new Fragment1());
        fragments.add(new Fragment2());
        fragments.add(new Fragment3());
        ViewPager viewPager=findViewById(R.id.vp);
        MyAdapter myAdapter = new MyAdapter(getSupportFragmentManager(), fragments);
        viewPager.setAdapter(myAdapter);
        String[] titles=new String[]{"賈婷是豬","賈婷是豬豬","賈婷是豬豬豬"};


        commonTab.setViewPager(viewPager,titles);




        banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE);
        banner.setBannerAnimation(Transformer.ZoomOut);
        banner.setImageLoader(new MyLoader());
        final List<String> paths=new ArrayList<>();
        paths.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1565777762164&di=eb6b88e8bb220b57b9122ff16585e795&imgtype=0&src=http%3A%2F%2Fpic41.nipic.com%2F20140508%2F18609517_112216473140_2.jpg");
        paths.add("http://img5.duitang.com/uploads/blog/201310/24/20131024150229_2WkWe.thumb.600_0.jpeg");
        paths.add("http://img4.duitang.com/uploads/blog/201310/24/20131024145724_PViiF.jpeg");
        banner.setImages(paths);

        List<String> strings=new ArrayList<>();
        strings.add("嚶嚶嚶1");
        strings.add("嚶嚶嚶3");
        strings.add("嚶嚶嚶2");
        banner.setBannerTitles(strings);

        banner.setOnBannerListener(new OnBannerListener() {
            @Override
            public void OnBannerClick(int position) {

            }
        });
        banner.start();

    }

    public class MyLoader extends ImageLoader{
        @Override
        public void displayImage(Context context, Object path, ImageView imageView) {
            Glide.with(context).load((String) path).into(imageView);
        }
    }



//    public class MyEmtity implements CustomTabEntity{
//        private String title;
//        private int seiconselectID;
//        private int unsellctIconid;
//
//        public MyEmtity(String title, int seiconselectID, int unsellctIconid) {
//            this.title = title;
//            this.seiconselectID = seiconselectID;
//            this.unsellctIconid = unsellctIconid;
//        }
//
//        @Override
//        public String getTabTitle() {
//            return title;
//        }
//
//        @Override
//        public int getTabSelectedIcon() {
//            return seiconselectID;
//        }
//
//        @Override
//        public int getTabUnselectedIcon() {
//            return unsellctIconid;
//        }
//    }

    public class MyAdapter extends FragmentPagerAdapter {
        private ArrayList<Fragment> data;
        public MyAdapter(FragmentManager fm, ArrayList<Fragment> data) {
            super(fm);
            this.data=data;
        }

        @Override
        public Fragment getItem(int position) {
            return data.get(position);
        }

        @Override
        public int getCount() {
            return data.size();
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="200dp">

    </com.youth.banner.Banner>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">




        <androidx.viewpager.widget.ViewPager
            android:id="@+id/vp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </androidx.viewpager.widget.ViewPager>

        <com.flyco.tablayout.SlidingTabLayout
            android:layout_width="match_parent"
            android:id="@+id/slide_tab2"

            android:layout_alignParentBottom="true"
            app:tl_tab_space_equal="true"
            app:tl_iconHeight="30dp"
            app:tl_iconWidth="30dp"
            app:tl_textSelectColor="@color/colorPrimary"
            app:tl_textUnselectColor="@color/colorAccent"
            android:layout_height="60dp">

        </com.flyco.tablayout.SlidingTabLayout>



    </RelativeLayout>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main2Activity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.flyco.tablayout.CommonTabLayout
            android:layout_width="match_parent"
            android:id="@+id/common_tab"
            android:layout_alignParentBottom="true"
            app:tl_iconHeight="30dp"
            app:tl_iconWidth="30dp"
            app:tl_textSelectColor="@color/colorPrimaryDark"
            app:tl_textUnselectColor="@color/colorAccent"
            android:layout_height="60dp">
        </com.flyco.tablayout.CommonTabLayout>


        <com.flyco.tablayout.SlidingTabLayout
            android:layout_width="match_parent"
            android:id="@+id/slide_tab"
            app:tl_iconHeight="30dp"
            app:tl_iconWidth="30dp"
            app:tl_textSelectColor="@color/colorPrimary"
            app:tl_textUnselectColor="@color/colorAccent"
            android:layout_above="@+id/common_tab"
            android:layout_height="60dp">

        </com.flyco.tablayout.SlidingTabLayout>


        <com.flyco.tablayout.SegmentTabLayout
            android:layout_width="match_parent"
            android:id="@+id/segment_tab"
            app:tl_iconHeight="30dp"
            app:tl_iconWidth="30dp"
            android:layout_centerHorizontal="true"
            app:tl_textUnselectColor="@color/colorAccent"
            android:layout_above="@+id/slide_tab"

            android:layout_height="60dp">

        </com.flyco.tablayout.SegmentTabLayout>

        <androidx.viewpager.widget.ViewPager
            android:id="@+id/lin"
            android:layout_width="match_parent"
            android:layout_height="400dp">

        </androidx.viewpager.widget.ViewPager>


    </RelativeLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main3Activity">

    <com.scwang.smart.refresh.layout.SmartRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/smart_refresh">

        <view class="androidx.appcompat.app.AlertController$RecycleListView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/recycler">

        </view>

    </com.scwang.smart.refresh.layout.SmartRefreshLayout>

</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Fragment1"
    android:background="#8800FA00"
    >

    <!-- TODO: Update blank fragment layout -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/start_1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="播放" />

        <Button
            android:id="@+id/stop_2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="暫停" />

    </LinearLayout>

    <SurfaceView
        android:id="@+id/video_media"
        android:layout_width="match_parent"
        android:layout_height="600dp" />

</FrameLayout>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章