国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android Studio——簡(jiǎn)單視頻播放器

這篇具有很好參考價(jià)值的文章主要介紹了Android Studio——簡(jiǎn)單視頻播放器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、界面分析

? ? ? ? 三個(gè)界面:主界面,視頻列表界面,視頻播放界面,如下圖所示:

Android Studio——簡(jiǎn)單視頻播放器Android Studio——簡(jiǎn)單視頻播放器Android Studio——簡(jiǎn)單視頻播放器

?2、實(shí)現(xiàn)思路

? ? ? ? (1)主界面設(shè)計(jì)

???????????很簡(jiǎn)單,就一個(gè)背景和一個(gè)控件,然后為控件設(shè)置點(diǎn)擊事件,然后跳轉(zhuǎn)到視頻列表界面

? ?activity_main.xml界面

<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=".MainActivity"
    android:background="@drawable/action"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="進(jìn)入視頻列表"
        android:textColor="@color/white"
        android:textStyle="bold"
        android:textSize="30sp"
        android:layout_marginTop="50dp"
        android:layout_gravity="center"
        android:id="@+id/btlogin"/>

</LinearLayout>

?MainActivity.java類(lèi)

public class MainActivity extends AppCompatActivity {
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView) findViewById(R.id.btlogin);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,MovieActivity.class);
                startActivity(intent);
            }
        });
    }
}

? ? ? ? ?(2)視頻列表界面

? ? ? ??每次跳轉(zhuǎn)都需要建立一個(gè)新的Activity,所以先建立一個(gè)MovieActivity,然后在對(duì)應(yīng)的xml文件設(shè)置列表,因?yàn)榇私缑嬗玫降目丶荝ecycleView,此控件屬于新增的控件,因此需要手動(dòng)添加依賴(lài)項(xiàng)。

? ? ? ? 在app/build.gradle文件中添加依賴(lài)項(xiàng),在閉包dependencies中添加如下語(yǔ)句

implementation 'com.android.support:recyclerview-v7:33.0.0'

? ? ? ? 注意添加的版本要和此文件中上面代碼中顯示的版本要一致,否則就會(huì)報(bào)紅,且項(xiàng)目也運(yùn)行不了。?

Android Studio——簡(jiǎn)單視頻播放器

?activity_movie.xml文件

<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=".MovieActivity"
    android:orientation="vertical"
    android:background="@drawable/back">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="視頻列表"
        android:textSize="30sp"
        android:gravity="center"
        android:textStyle="bold"
        android:background="@color/black"
        android:textColor="@color/white"/>
    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recyclerview"/>
</LinearLayout>

? ? ? ? ?列表框架就如下所示,所以看圖就可以知道我們還需要對(duì)此界面列表中的每一行進(jìn)行具體的設(shè)計(jì)

Android Studio——簡(jiǎn)單視頻播放器

? ? ? ? ?新建一個(gè)xml文件,名為movie_item_layout.ml,具體如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
        <ImageView
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:background="@drawable/image"
            android:id="@+id/movievideo"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/moviename"
            android:text="dianyinm"
            android:textSize="25sp"
            android:layout_marginLeft="10dp"
            android:layout_gravity="center_vertical"/>
</LinearLayout>

? ? ? ? 我自己在寫(xiě)的時(shí)候,犯了一個(gè)小錯(cuò)誤,就是在此界面我又添加了背景圖,然后就導(dǎo)致了列表里的照片無(wú)論怎么設(shè)計(jì),每一行的數(shù)據(jù)都顯示在此背景圖上,然后另一個(gè)數(shù)據(jù)會(huì)顯示在另一張圖上,就好像分頁(yè)一樣,及其不美觀,所以如果在?activity_movie.xml文件中設(shè)置了背景圖的話(huà),就不用在此xml文件下再次設(shè)置了,這個(gè)界面是上一個(gè)界面的子布局。

????????

? ? ? ? 界面設(shè)置完之后,我們分析以下,視頻列表界面有哪些屬性呢,有視頻名,視頻地址,因?yàn)榇舜卧O(shè)計(jì)使用的照片都是統(tǒng)一的,所以就不用寫(xiě)在屬性里了。

? ? ? ? 所以在這里建立實(shí)體類(lèi)Movie.java

public class Movie {
    private String moviename;
    private String movieuri;
    public Movie(String moviename,String movieuri){
        this.moviename=moviename;
        this.movieuri=movieuri;
    }
    public String getMoviename(){
        return moviename;
    }
    public String getMovieuri(){
        return movieuri;
    }
}

? ? ? ? 然后就是需要為RecyclerView自定義一個(gè)適配器,所以建立一個(gè)適配器類(lèi),代碼如下:

MovieAdapter.java

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {
    List<Movie> mymovieList;
    public class ViewHolder extends RecyclerView.ViewHolder{
        View movieview;
        TextView moviename;
        public ViewHolder(@NonNull View view){
            super(view);
            moviename=itemView.findViewById(R.id.moviename);
            movieview=view;
        }
    }
    //利用適配器的構(gòu)造函數(shù)傳入要展示的數(shù)據(jù)
    public MovieAdapter(List<Movie> mymovieList){
        this.mymovieList=mymovieList;
    }
    //創(chuàng)建實(shí)例,把每一行的布局加載進(jìn)來(lái),創(chuàng)建一個(gè)ViewHolder實(shí)例,將布局傳入到構(gòu)造函數(shù)中,最后將實(shí)例返回
    public MovieAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.movie_item_layout,parent,false);
        final ViewHolder holder=new ViewHolder(view);
        //單擊任意視頻跳轉(zhuǎn)到播放界面
        holder.movieview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //獲取位置
                int position=holder.getAdapterPosition();
                Movie movie=mymovieList.get(position);
                String mymoviename=movie.getMoviename();
                String mymovievideo=movie.getMovieuri();
                //獲取位置后跳轉(zhuǎn)
                Intent intent=new Intent(view.getContext(),PlayActivity.class);
                //然后根據(jù)位置傳遞信息
                intent.putExtra("my",mymoviename);
                intent.putExtra("movieurl",mymovievideo);
                view.getContext().startActivity(intent);
            }
        });
        return holder;
    }
    //對(duì)recyclerview中子項(xiàng)目進(jìn)行賦值,通過(guò)位置得到當(dāng)前的實(shí)例,然后電影名和視頻顯示在控件上
    public void onBindViewHolder(@NonNull MovieAdapter.ViewHolder holder,int position){
        Movie movie=mymovieList.get(position);
        holder.moviename.setText(movie.getMoviename());
    }
    public int getItemCount(){
        return mymovieList.size();
    }
}

? ? ? ? MovieAdapter繼承RecyclerView.Adapter,并將泛型指定為MovieAdapter.ViewHolder,因?yàn)槔^承了RecyclerView.Adapter類(lèi),所以必須對(duì)onCreateViewHolder()、onBindViewHolder、getItemCount()這3個(gè)方法重寫(xiě)。

? ? ? ? 因?yàn)橐x取SD卡和訪問(wèn)網(wǎng)絡(luò)上的視頻資源,所以要在androidmanifest.xml文件中設(shè)置讀取權(quán)限,如下所示:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
        tools:ignore="ProtectedPermissions"/>
    <uses-permission android:name="android.permission.INTERNET"/>

? ? ? ? 設(shè)置完之后可能還獲取不了權(quán)限,我當(dāng)時(shí)寫(xiě)的時(shí)候總是讀取不了數(shù)據(jù),然后查了資料,才終于弄出來(lái),應(yīng)該是新的AS軟件不僅僅要添加權(quán)限,還有單獨(dú)設(shè)置建立一個(gè)權(quán)限類(lèi),然后在讀取數(shù)據(jù)時(shí)調(diào)用它就可以了。具體如下所示

PermissionUtils.java類(lèi)

public class PermissionUtils {
    // Storage Permissions
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don't have permission so prompt the user
            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE);
        }
    }
}

? ? ? ? 此時(shí),要設(shè)置的基本就完成了,接下來(lái)就對(duì)MovieActivity.java操控了,此界面就是顯示列表界面的數(shù)據(jù)啦,具體如下:

MovieActivity.java

public class MovieActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    List<Movie> movieList;
    MovieAdapter movieAdapter;
    private static final String TAG="MovieActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_movie);
        recyclerView=(RecyclerView) findViewById(R.id.recyclerview);
        initData();
    }
    public void initData(){
        //建立動(dòng)態(tài)數(shù)組存放數(shù)據(jù)
        movieList=new ArrayList<>();
        //獲取網(wǎng)絡(luò)視頻
        Movie firstmovie=new Movie("明星大偵探","http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4");
        movieList.add(firstmovie);
        Movie secondmovie=new Movie("哈哈哈哈哈","https://www.dglydz.com/mov-hahahahahadierji.html");
        movieList.add(secondmovie);
        //獲取本工程中的視頻
        Movie thirdmovie=new Movie("等到苦盡甘來(lái)時(shí),待我給你講來(lái)時(shí)的路","android.resource://"+getPackageName()+"/"+R.raw.read);
        movieList.add(thirdmovie);
        Movie forthmovie=new Movie("陽(yáng)光開(kāi)朗孔乙己","android.resource://"+getPackageName()+"/"+R.raw.why);
        movieList.add(forthmovie);
        //獲取模擬器中的視頻
        Movie fifthmovie=new Movie("我會(huì)等","file:///storage/emulated/0/Pictures/waitting.mp4");
        movieList.add(fifthmovie);
        Movie sixthmovie=new Movie("稻香","file:///storage/emulated/0/Pictures/jay.mp4");
        movieList.add(sixthmovie);
        //將視頻顯示在控件上
        movieAdapter=new MovieAdapter(movieList);
        StaggeredGridLayoutManager layoutManager=new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(movieAdapter);
    }
}

? ? ? ? (3)播放界面

? ? ? ? 新建Activity,此界面就是獲取從列表傳過(guò)來(lái)的視頻名和視頻地址,然后進(jìn)行播放,具體代碼如下:

activity_play.xml

<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=".PlayActivity"
    android:orientation="vertical"
    android:background="@drawable/back">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tvmovename"
        android:text="name"
        android:layout_marginTop="30dp"
        android:textSize="40sp"
        android:gravity="center"
        android:textStyle="bold"/>
    <VideoView
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:id="@+id/vvmovie"
        android:layout_marginTop="10dp"/>
</LinearLayout>

PlayActivity.java

public class PlayActivity extends AppCompatActivity {
     private TextView tvvedioname;
     private VideoView videoView;
     //媒體控制器
    private MediaController mediaController;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);
        tvvedioname= findViewById(R.id.tvmovename);
        videoView=findViewById(R.id.vvmovie);
        mediaController=new MediaController(this);
        initData();
        verifyStoragePermissions(this);
    }
    public void initData(){
        //獲取從音樂(lè)列表傳過(guò)來(lái)的視頻名稱(chēng)和地址
        String videoname=getIntent().getStringExtra("my");
        String videouri=getIntent().getStringExtra("movieurl");
        //String videourl= Environment.getExternalStorageDirectory().getAbsolutePath()+"/jay.mp4";
        //Log.i("PlayActivity","videourl="+videourl);
        //將視頻名稱(chēng)顯示在文本框中,將視頻地址關(guān)聯(lián)到播放器中
        tvvedioname.setText(videoname);
        videoView.setVideoPath(videouri);
        //videoView.setVideoPath(videourl);
        //將視頻播放器和媒體控制柄關(guān)聯(lián)起來(lái)
        videoView.setMediaController(mediaController);
        //媒體控制柄和視頻播放器關(guān)聯(lián)起來(lái)
        mediaController.setMediaPlayer(videoView);
        //啟動(dòng)視頻播放器播放視頻
        videoView.start();
    }
}

? ? ? ? 三個(gè)不同路徑(網(wǎng)絡(luò)/文件夾內(nèi)/模擬器里的視頻)的視頻的加載如下所示,具體的知識(shí)點(diǎn)就不描述了,基本代碼上都有備注。?

Android Studio——簡(jiǎn)單視頻播放器Android Studio——簡(jiǎn)單視頻播放器Android Studio——簡(jiǎn)單視頻播放器

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-468615.html

?

到了這里,關(guān)于Android Studio——簡(jiǎn)單視頻播放器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android Studio 做一個(gè) MP3 播放器

    Android Studio 本身提供了多個(gè)音頻播放器組件,可以通過(guò)這些組件來(lái)實(shí)現(xiàn)音頻播放功能,其中包括 MediaPlayer、SoundPool 和 ExoPlayer 等。官方推薦我們使用ExoPlayer因?yàn)楣δ芨鼜?qiáng)大,但這里用MediaPlayer因?yàn)榫帉?xiě)更簡(jiǎn)單。 在使用 MediaPlayer 實(shí)現(xiàn) MP3 播放器時(shí),需要注意以下幾點(diǎn): 在使用

    2024年02月04日
    瀏覽(20)
  • Android開(kāi)發(fā)之視頻播放器

    Android開(kāi)發(fā)之視頻播放器

    今天教大家做一個(gè)簡(jiǎn)單的視頻播放器hh 至此,結(jié)束!

    2023年04月09日
    瀏覽(29)
  • Android學(xué)習(xí)6——視頻播放器

    Android學(xué)習(xí)6——視頻播放器

    一、學(xué)習(xí)目標(biāo) 1. 綜合應(yīng)用課程知識(shí)。 2. 掌握 App 開(kāi)發(fā)流程及相關(guān)工具。 3. 設(shè)計(jì) 一個(gè)基于 Android 平臺(tái)的簡(jiǎn)單視頻播放器。 二、環(huán)境 1.JDK-15.0.2 以上 2.Android Studio 4.1 以上 3.Android 10.0 ( API level 29 ) 三、內(nèi)容 軟件功能簡(jiǎn)介 (1) 能夠播放 3gp, .mp4 等文件; (2) 能處理簡(jiǎn)單的異常,例

    2024年02月01日
    瀏覽(23)
  • Android 視頻播放器dkplayer

    Android 視頻播放器dkplayer

    gihub地址 : https://github.com/Doikki/DKVideoPlayer GitHub - Doikki/DKVideoPlayer: Android Video Player. 安卓視頻播放器,封裝MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音并實(shí)現(xiàn)預(yù)加載,列表播放,懸浮播放,廣告播放,彈幕,視頻水印,視頻濾鏡 列表播放如圖所示: 一、依賴(lài) 二、工具類(lèi) Tag.java Vi

    2024年02月13日
    瀏覽(26)
  • Android Studio初學(xué)者實(shí)例:仿網(wǎng)易音樂(lè)播放器

    Android Studio初學(xué)者實(shí)例:仿網(wǎng)易音樂(lè)播放器

    本期帶來(lái)的是以Service為主要的知識(shí)點(diǎn)的網(wǎng)易音樂(lè)播放器 看一下效果圖 ?首先項(xiàng)目準(zhǔn)備: 在res下新建raw文件夾,并在文件夾中添加喜愛(ài)的mp3音樂(lè) ?OK,第一步,先寫(xiě)一個(gè)背景文件,在res/drawable文件夾中新建xml文件: btn_bg_selector.xml ?編寫(xiě)主界面代碼activity_main.xml 編寫(xiě)MusicServic

    2024年02月05日
    瀏覽(26)
  • Android Studio初學(xué)者實(shí)例:音樂(lè)播放器與Service學(xué)習(xí)

    Android Studio初學(xué)者實(shí)例:音樂(lè)播放器與Service學(xué)習(xí)

    本次一個(gè)案例實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的音樂(lè)播放器 用到的知識(shí)點(diǎn)最主要的幾點(diǎn)是:Service、handler(實(shí)現(xiàn)音樂(lè)播放的進(jìn)度條更新與圖片旋轉(zhuǎn))以及用于播放音頻的MediaPlayer 看一下案例效果: ?由于Service是Android的四大組件之一,Activity、Service等等一個(gè)重要知識(shí)點(diǎn)就是生命周期的問(wèn)題,

    2024年02月03日
    瀏覽(42)
  • 簡(jiǎn)單小項(xiàng)目:基于Mplayer的視頻播放器(Linux)

    簡(jiǎn)單小項(xiàng)目:基于Mplayer的視頻播放器(Linux)

    目錄 0 視頻演示? 1 makefile 2 頭文件? public.h ?show.h do.c 3 源文件.c? 主函數(shù)main.c show.c? ?do.c 4 項(xiàng)目資源下載 ?https://download.csdn.net/download/m0_58193842/87371186?spm=1001.2014.3001.5503 ? ? 0.以文件的形式存儲(chǔ)軟件的日志信息 ?? ?1.該程序能夠加載指定路徑下所有的音視頻文件 ?? ?(.mp3

    2024年02月15日
    瀏覽(19)
  • 青島華為云代理商:android視頻網(wǎng)絡(luò)播放器

    青島華為云代理商:android視頻網(wǎng)絡(luò)播放器

    簡(jiǎn)介: 飛機(jī)@luotuoemo 本文由(華為云國(guó)際站代理商:【聚搜云】www.4526.cn )撰寫(xiě) 目錄 青島華為云代理商:android視頻網(wǎng)絡(luò)播放器 青島華為云代理商:android視頻網(wǎng)絡(luò)播放器 1. 引言 2. 華為云的優(yōu)勢(shì) 2.1 強(qiáng)大的云計(jì)算能力 2.2 安全可靠的存儲(chǔ)服務(wù) 2.3 多地域分布的內(nèi)容分發(fā)網(wǎng)絡(luò) 2

    2024年01月18日
    瀏覽(39)
  • 簡(jiǎn)單版本視頻播放服務(wù)器V3-前端優(yōu)化-播放器在左,列表在右側(cè)【推薦】【完成】

    簡(jiǎn)單版本視頻播放服務(wù)器V3-前端優(yōu)化-播放器在左,列表在右側(cè)【推薦】【完成】

    做個(gè)家用版本的家庭影院,通過(guò)這個(gè)服務(wù)器可以給電腦,平板,手機(jī)等設(shè)備提供直接播放電影的作用,通過(guò)離線下載電影放入目錄里就是就可以給全家提供電影播放了,通過(guò)瀏覽器就是可以訪問(wèn)電腦里面的視頻,實(shí)現(xiàn)簡(jiǎn)單的家庭版本服務(wù)了。 1.0最終代碼:【前端以這個(gè)為主;

    2024年02月16日
    瀏覽(25)
  • Flutter視頻播放器在iOS端和Android端都能實(shí)現(xiàn)全屏播放

    Flutter視頻播放器在iOS端和Android端都能實(shí)現(xiàn)全屏播放

    Flutter開(kāi)發(fā)過(guò)程中,對(duì)于視頻播放的三方組件有很多,在Android端適配都挺好,但是在適配iPhone手機(jī)的時(shí)候,如果設(shè)置了 UIInterfaceOrientationLandscapeLeft 和 UIInterfaceOrientationLandscapeRight 都為false的情況下,無(wú)法做到全屏播放,因?yàn)镕Lutter的 SystemChrome.setPreferredOrientations 方法不適配iOS端

    2024年02月05日
    瀏覽(38)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包