移动应用程序设计基础——安卓动画与视音频播放器的实现
《移動應用程序設計基礎》實驗6 安卓動畫與視音頻播放器的實現
?
實驗名稱:
實驗6 安卓動畫與視音頻播放器的實現?
所使用的工具軟件及環境:
JDK1.8,Android Studio
?
一、實驗目的:
【目的】
通過本實驗,使得學生掌握導航的制作基本方法,掌握安卓動畫和多媒體播放器的制作。
【實驗設備】
安裝Android Studio的電腦一臺,同時安裝模擬器或者Android手機真機一臺,保證網絡暢通。
?
二、實驗內容:
【實驗內容】
【實驗過程】
底部導航實現過程按如下實例:
1.主要布局文件activity_main.xml
?
| <?xml version="0" encoding="utf-8"?><RelativeLayout 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"tools:context="edu.zstu.multipage.MainActivity"><!--容器,用來操作Fragment的增加替換等--><FrameLayoutandroid:id="@+id/fragment_container"android:layout_width="match_parent"android:layout_height="match_parent"/><!--底部菜單欄--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="70dp"android:orientation="horizontal"android:background="@android:color/darker_gray"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true"><LinearLayoutandroid:layout_width="0dp"android:orientation="vertical"android:layout_height="match_parent"android:layout_weight="1"><ImageButtonandroid:id="@+id/home_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="5dp"android:src="@drawable/home_press"android:background="@android:color/transparent" /> |
?
| ? | |
| ? | <TextView?????? android:id="@+id/home_txt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="主頁"android:textColor="@android:color/holo_red_dark"android:gravity="center"/></LinearLayout><LinearLayoutandroid:layout_width="0dp"android:orientation="vertical"android:layout_height="match_parent"android:layout_weight="1"><ImageButtonandroid:id="@+id/info_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="5dp"android:src="@drawable/info"android:background="@android:color/transparent"/><TextViewandroid:id="@+id/info_txt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="消息"android:textColor="@android:color/black"android:gravity="center" /></LinearLayout></LinearLayout></RelativeLayout> |
2.第一Fragment和第二個Fragment:fragment_first.xml(為例)
?
| <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="FirstPage"android:textSize="24sp"android:gravity="center|center"/></LinearLayout> |
3. MainActivity
?
3.1聲明部分
ImageButton homeBtn,infoBtn;TextView homeTxt,infoTxt;Context mContext;FragmentTransaction transaction;3.2 初始化
mContext = this;homeBtn = (ImageButton)findViewById(R.id.home_btn);infoBtn = (ImageButton)findViewById(R.id.info_btn);homeTxt = (TextView)findViewById(R.id.home_txt);infoTxt = (TextView)findViewById(R.id.info_txt);//取得Fragment管理器Fragment firstFragment = new FirstFragment();transaction =getSupportFragmentManager().beginTransaction();//默認下將firstFragment添加到容器中transaction.add(R.id.fragment_container,firstFragment);//提交事務transaction.commit();3.3按鈕點擊(實現其中一個按鈕,另一個按鈕參照完成)
//背景替換infoBtn.setImageResource(R.drawable.info);infoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));homeBtn.setImageResource(R.drawable.home_press);homeTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.holo_red_dark));//取得Fragment管理器Fragment firstFragment = new FirstFragment();//將新建的firstFragment替換容器中的其他片段,這將重新加載布局文件。transaction =getSupportFragmentManager().beginTransaction();transaction.replace(R.id.fragment_container,firstFragment); transaction.commit(); 3.4 FirstFragment .java(SecondFragment類同) public class FirstFragment extends Fragment { ??? @Override ??? public View onCreateView(LayoutInflater inflater, ViewGroup container, ???????????????????????????? Bundle savedInstanceState) { ??????? View v = inflater.inflate(R.layout.fragment_first,null); ??????? return v; ??? } }4.運行結果
有關底部導航的多種實現方法可參看https://blog.csdn.net/jxq1994/article/details/52573506?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-10.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-10.control
按實驗要求分別實現Tween動畫、Frame動畫、音頻播放和視頻播放四個導航鍵的功能。
?
三、實驗結果測試(完整所有代碼在資源下載壓縮包中,文章結尾有資源下載鏈接)
共5個java文件和5個相對應的xml布局文件,其中還有一些資源文件。
?
主要的java代碼:
?
//MainActivity.javapackage com.example.a6;import android.Manifest; import android.app.Activity; import android.content.Context;import android.content.pm.PackageManager; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.FragmentTransaction;public class MainActivity extends AppCompatActivity {//澹版槑ImageButton homeBtn,infoBtn,musicBtn,videoBtn;TextView homeTxt,infoTxt,musicTxt,videoTxt;Context mContext;FragmentTransaction transaction;private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//鍒濆鍖�init();verifyStoragePermissions(this);homeBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//鑳屾櫙鏇挎崲infoBtn.setImageResource(R.drawable.info);infoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));musicBtn.setImageResource(R.drawable.music1);musicTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));videoBtn.setImageResource(R.drawable.video1);videoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));homeBtn.setImageResource(R.drawable.home_press);homeTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.holo_red_dark)); //鍙栧緱Fragment綆$悊鍣�Fragment_First firstFragment = new Fragment_First(); //灝嗘柊寤虹殑firstFragment鏇挎崲瀹瑰櫒涓殑鍏朵粬鐗囨錛岃繖灝嗛噸鏂板姞杞藉竷灞�鏂囦歡銆�transaction =getSupportFragmentManager().beginTransaction();transaction.replace(R.id.fragment_container,firstFragment);transaction.commit();}});infoBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//鑳屾櫙鏇挎崲infoBtn.setImageResource(R.drawable.info_press);infoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.holo_red_dark));homeBtn.setImageResource(R.drawable.home);homeTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));musicBtn.setImageResource(R.drawable.music1);musicTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));videoBtn.setImageResource(R.drawable.video1);videoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black)); //鍙栧緱Fragment綆$悊鍣�Fragment_Second secondFragment = new Fragment_Second(); //灝嗘柊寤虹殑firstFragment鏇挎崲瀹瑰櫒涓殑鍏朵粬鐗囨錛岃繖灝嗛噸鏂板姞杞藉竷灞�鏂囦歡銆�transaction =getSupportFragmentManager().beginTransaction();transaction.replace(R.id.fragment_container,secondFragment);transaction.commit();}});musicBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {infoBtn.setImageResource(R.drawable.info);infoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));homeBtn.setImageResource(R.drawable.home);homeTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));musicBtn.setImageResource(R.drawable.music2);musicTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.holo_red_dark));videoBtn.setImageResource(R.drawable.video1);videoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));Fragment_Third ThirFragment=new Fragment_Third();transaction =getSupportFragmentManager().beginTransaction();transaction.replace(R.id.fragment_container,ThirFragment);transaction.commit();}});videoBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {infoBtn.setImageResource(R.drawable.info);infoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));homeBtn.setImageResource(R.drawable.home);homeTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));musicBtn.setImageResource(R.drawable.music1);musicTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.black));videoBtn.setImageResource(R.drawable.video2);videoTxt.setTextColor(ContextCompat.getColor(mContext,android.R.color.holo_blue_dark));Fragment_Fourth FourthFragment=new Fragment_Fourth();transaction =getSupportFragmentManager().beginTransaction();transaction.replace(R.id.fragment_container,FourthFragment);transaction.commit();}});}public static void verifyStoragePermissions(Activity activity) {// Check if we have write permissionint permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);if (permission != PackageManager.PERMISSION_GRANTED) {// We don't have permission so prompt the userActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);}}private void init() {mContext = this;homeBtn = (ImageButton)findViewById(R.id.home_btn);infoBtn = (ImageButton)findViewById(R.id.info_btn);homeTxt = (TextView)findViewById(R.id.home_txt);infoTxt = (TextView)findViewById(R.id.info_txt);musicBtn=(ImageButton) findViewById(R.id.musicBtn);musicTxt=(TextView)findViewById(R.id.musicTxt);videoBtn=(ImageButton)findViewById(R.id.videoBtn);videoTxt=(TextView)findViewById(R.id.videoTxt); //鍙栧緱Fragment綆$悊鍣�Fragment_First firstFragment = new Fragment_First();transaction =getSupportFragmentManager().beginTransaction(); //榛樿涓嬪皢firstFragment娣誨姞鍒板鍣ㄤ腑transaction.add(R.id.fragment_container,firstFragment); //鎻愪氦浜嬪姟transaction.commit();} } //Fragment_First.java package com.example.a6;import android.app.Activity; import android.content.Context; import android.content.Intent; import android.media.Image; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.AnimationUtils; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.Button; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast;import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity;import java.util.ArrayList; import java.util.HashMap; import java.util.List;public class Fragment_First extends Fragment {private ImageView image;Animation anim;// Context mContext;private Button rotate,translate,alpha,scale;private Context context;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.context=getActivity();}public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_first,container,false);image=(ImageView) view.findViewById(R.id.tween);rotate=(Button) view.findViewById(R.id.rotate);translate=(Button) view.findViewById(R.id.translate);alpha=(Button) view.findViewById(R.id.alpha);scale=(Button) view.findViewById(R.id.scale);setClickListener();Animation animation = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);animation.setDuration(5000);image.setAnimation(animation);return view;}private void setClickListener() {rotate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {anim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);anim.setDuration(5000); //該方法用于設置一個動畫效果執行完畢后,View對象保留在終止的位置/* animation.setFillAfter(true);*/image.startAnimation(anim);Toast.makeText(context, "旋轉", Toast.LENGTH_SHORT).show();}});alpha.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);alphaAnimation.setDuration(3000);AnimationSet animationSet = new AnimationSet(false);animationSet.addAnimation(alphaAnimation);// 開始播放動畫。image.startAnimation(animationSet);Toast.makeText(context, "透明", Toast.LENGTH_SHORT).show();}});scale.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {anim = new ScaleAnimation(0.0f, 1.2f, 0.0f, 1.2f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f);anim.setDuration(2000);//所有屬性可以通過set函數設置image.startAnimation(anim);Toast.makeText(context, "縮放", Toast.LENGTH_SHORT).show();}});translate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {anim = new TranslateAnimation(0.0f, 1200f, 0f, 0f);anim.setDuration(2000);image.startAnimation(anim);Toast.makeText(context, "移動", Toast.LENGTH_SHORT).show();}});} } //Fragment_Second.javapackage com.example.a6;import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView;import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment;public class Fragment_Second extends Fragment {private ImageView ivImage;private Button start,stop;private AnimationDrawable anim;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);}public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View v = inflater.inflate(R.layout.fragment_second,null);ivImage = (ImageView) v.findViewById(R.id.frame_image);start=(Button) v.findViewById(R.id.startframe);stop=(Button) v.findViewById(R.id.stopframe);ivImage.setBackgroundResource(R.drawable.frame);anim = (AnimationDrawable) ivImage.getBackground();ivImage.post( new Runnable() {@Overridepublic void run() {anim.start();}});setClickListener();return v;}private void setClickListener() {stop.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {anim.stop();}});start.setOnClickListener( new View.OnClickListener() {@Overridepublic void onClick(View v) {anim.start();}});} } //Fragment_Third.javapackage com.example.a6;import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle;import androidx.annotation.Nullable; import androidx.fragment.app.Fragment;import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast;import java.io.File; import java.io.IOException;public class Fragment_Third extends Fragment {private Button play,pause,stop,replay;private ImageView music;private MediaPlayer mediaPlayer;private Context context;Animation anim;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);context=getActivity();}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView view = inflater.inflate(R.layout.fragment__third,container,false);play=(Button) view.findViewById(R.id.start);pause=(Button) view.findViewById(R.id.pause);replay=(Button) view.findViewById(R.id.replay);stop=(Button) view.findViewById(R.id.stop);music=(ImageView) view.findViewById(R.id.music3);play.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {anim = new RotateAnimation(0, 3600, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);anim.setDuration(50000);anim.setFillAfter(true);music.startAnimation(anim);mediaPlayer = new MediaPlayer();try {mediaPlayer.setDataSource("/sdcard/Music/love.mp3");mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.prepareAsync();mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mediaPlayer.start();Toast.makeText(context, "開始播放", Toast.LENGTH_SHORT).show();play.setEnabled(false);}});mediaPlayer.setLooping(true);mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {play.setEnabled(true);}});mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {@Overridepublic boolean onError(MediaPlayer mp, int what, int extra) {if(mediaPlayer!=null&&mediaPlayer.isPlaying()){mediaPlayer.seekTo(0);Toast.makeText(context, "重新播放", Toast.LENGTH_SHORT).show();pause.setText("暫停");//return;}return false;}});} catch (IOException e) {e.printStackTrace();Toast.makeText(context, "播放失敗", Toast.LENGTH_SHORT).show();}}});replay.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer!=null&&mediaPlayer.isPlaying()){mediaPlayer.seekTo(0);Toast.makeText(context, "重新播放", Toast.LENGTH_SHORT).show();pause.setText("暫停");//return;}}});pause.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(pause.getText().toString().trim().equals("繼續")){pause.setText("暫停");mediaPlayer.start();Toast.makeText(context, "繼續播放", Toast.LENGTH_SHORT).show();// return;}else if(mediaPlayer!=null&&mediaPlayer.isPlaying()){mediaPlayer.pause();pause.setText("繼續");Toast.makeText(context, "暫停播放", Toast.LENGTH_SHORT).show();}}});stop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mediaPlayer!=null&&mediaPlayer.isPlaying()){mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;play.setEnabled(true);Toast.makeText(context, "停止播放", Toast.LENGTH_SHORT).show();}}});return view;}private void setOnclick() {}public void onDestroy() {if(mediaPlayer!=null&&mediaPlayer.isPlaying()){mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;}super.onDestroy();} } //Fragment_Fourth.javapackage com.example.a6;import android.content.Context; import android.media.MediaPlayer; import android.os.Bundle;import androidx.annotation.Nullable; import androidx.fragment.app.Fragment;import android.view.LayoutInflater; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView;import java.io.IOException;public class Fragment_Fourth extends Fragment {private MediaPlayer mediaPlayer;private SurfaceView sv_main_surface;private TextView tv_start;private TextView tv_end;private SeekBar seekbar;private Context context;private ImageButton play;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);context=getActivity();}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView view = inflater.inflate(R.layout.fragment__fourth,container,false);sv_main_surface = (SurfaceView) view.findViewById(R.id.sv_main_surface);tv_start = (TextView)view.findViewById(R.id.tv_start);tv_end = (TextView)view. findViewById(R.id.tv_end);seekbar = (SeekBar) view.findViewById(R.id.seekbar);play=(ImageButton)view.findViewById(R.id.bt_media);//設置監聽seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int i, boolean b) {//獲取音樂總時間int duration2=mediaPlayer.getDuration()/1000;//獲取音樂當前播放的位置int position=mediaPlayer.getCurrentPosition();//開始時間tv_start.setText(calculateTime(position/1000));//結束時間tv_end.setText(calculateTime(duration2));}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {int progress=seekBar.getProgress();//在當前位置播放mediaPlayer.seekTo(progress);}});play.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//判斷音頻文件是否為空if(mediaPlayer==null){//為空則創建音樂文件并播放改變按鈕樣式//播放內存卡中文件mediaPlayer=new MediaPlayer();try {mediaPlayer.setDataSource("/sdcard/Movies/貓和老鼠.mp4");//準備mediaPlayer.prepare();} catch (IOException e) {e.printStackTrace();}//將媒體播放器捕捉的畫面展示到SurfaceViewmediaPlayer.setDisplay(sv_main_surface.getHolder());//開始播放mediaPlayer.start();//設置buttonplay.setImageResource(android.R.drawable.ic_media_pause);//獲取音樂總時間int duration=mediaPlayer.getDuration();//將音樂總時間設置為SeekBar的最大值seekbar.setMax(duration);//線程修改時間值new MyThread().start();//音樂文件正在播放,則暫停并改變按鈕樣式}else if(mediaPlayer.isPlaying()){mediaPlayer.pause();play.setImageResource(android.R.drawable.ic_media_play);}else{//啟動播放mediaPlayer.start();play.setImageResource(android.R.drawable.ic_media_pause);}}});return view;}public void isPlayOrPause(View view){}class MyThread extends Thread{@Overridepublic void run() {super.run();while(seekbar.getProgress()<=seekbar.getMax()){//獲取音樂當前播放的位置int position=mediaPlayer.getCurrentPosition();//放入SeekBar中seekbar.setProgress(position);}}}//計算播放時間public String calculateTime(int time){int minute;int second;if(time>=60){minute=time/60;second=time%60;return minute+":"+second;}else if(time<60){second=time;return "0:"+second;}return null;} }實驗結果截圖:
?
?
?
?
心得與體會:
本次實驗,學習了Fragment的用法以及學會Tween四種alpha,translate,rotate,scale動畫、Frame逐幀動畫和音頻播放,視頻播放等。通過此次實驗,學習到的知識頗多,對android的開發有了進一步的學習。
?
?下載資源包鏈接:
?https://download.csdn.net/download/weixin_48388330/76309689
資源中的圖片以及內容只適用與學習?
?
?
總結
以上是生活随笔為你收集整理的移动应用程序设计基础——安卓动画与视音频播放器的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一章 轻功盖世
- 下一篇: 字节跳动日常实习一二三面面经(后端开发)