欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Android

當(dāng)前位置:主頁 > 軟件編程 > Android >

Android開發(fā)簡易音樂 器

來源:本站原創(chuàng)|時間:2020-01-10|欄目:Android|點(diǎn)擊: 次

這里介紹一個簡易的音樂 器,供大家參考,具體內(nèi)容如下

效果圖如下:

但是,由于這是一個簡易版的音樂 器,所 的音樂只有一首,且被寫死,但,操作卻十分簡單,方便理解!

這是代碼的主要設(shè)計:

音樂主要存放在這一個文件中:

下面就來介紹各部分代碼:

activity—main。xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="#696969">
 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="60dp"
 android:layout_marginTop="10dp"
 android:layout_alignParentTop="true"
 android:id="@+id/title"
 android:orientation="horizontal">
 <TextView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="15dp"
  android:layout_marginBottom="3dp"
  android:text="生僻字"
  android:textSize="25dp"
  android:gravity="center"
  android:textColor="#ffffff"/>
 </LinearLayout>
 <TextView
 android:layout_width="match_parent"
 android:layout_height="0.5dp"
 android:background="#afafaf"
 android:layout_below="@+id/title"/>
 <ImageView
 android:id="@+id/disc"
 android:layout_width="280dp"
 android:layout_height="280dp"
 android:layout_centerHorizontal="true"
 android:layout_below="@+id/title"
 android:layout_marginTop="50dp"
 android:src="@drawable/xcvb" />
 <ImageView
 android:id="@+id/needle"
 android:layout_width="120dp"
 android:layout_height="120dp"
 android:layout_below="@+id/title"

 android:layout_marginLeft="150dp"/>

 <RelativeLayout
 android:id="@+id/music1"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_above="@+id/rl"
 android:layout_marginTop="20dp"
 android:layout_marginBottom="10dp"
 android:gravity="center">
 <SeekBar
  android:id="@+id/music_seek_bar"
  android:layout_width="240dp"
  android:layout_height="wrap_content"/>
 <TextSwitcher
  android:id="@+id/text_switcher"
  android:layout_width="80dp"
  android:layout_height="50dp"
  android:layout_toRightOf="@+id/music_seek_bar">
  <TextView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="00:00/2:00"
  android:textColor="@color/colorAccent"/>
 </TextSwitcher>
 </RelativeLayout>

 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="70dp"
 android:gravity="center"
 android:id="@+id/rl"
 android:layout_marginBottom="20dp"
 android:layout_alignParentBottom="true"
 android:orientation="horizontal">

 <ImageView
  android:id="@+id/playing_pre"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:src="@drawable/music_previous" />

 <ImageView
  android:id="@+id/playing_play"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:src="@drawable/music_play" />

 <ImageView
  android:id="@+id/playing_next"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center_vertical"
  android:src="@drawable/music_next" />
 </LinearLayout>
</RelativeLayout>

main。activity部分:

package com.example.cungu.musicdemo;


import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Build;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextSwitcher;

import java.text.SimpleDateFormat;
import java.util.Date;


public class MainActivity extends AppCompatActivity implements View.OnClickListener,
 Runnable, ServiceConnection, SeekBar.OnSeekBarChangeListener {
 private ImageView disc,needle,playingPre,playingPlay,playingNext;
 private ObjectAnimator discAnimation,needleAnimation;//自定義指針和唱盤
 private boolean isPlaying = true;//0,1 判斷是否處于      狀態(tài)

 //聲明服務(wù)
 private static final String TAG = MainActivity.class.getSimpleName();
 private MediaService.MusicController mMusicController;
 //使用方法:mMusicController.play();       mMusicController.pause();暫停
 private boolean running;
 private TextSwitcher mSwitcher;
 private SeekBar mSeekBar;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 //設(shè)置透明欄
 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  Window window = getWindow();
  window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
   | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
  window.getDecorView().setSystemUiVisibility(
   View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  );
  window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  window.setStatusBarColor(Color.TRANSPARENT);
 }
 //滑動條部分
 mSeekBar = (SeekBar) findViewById(R.id.music_seek_bar);
 mSeekBar.setOnSeekBarChangeListener(this);
 mSwitcher = (TextSwitcher) findViewById(R.id.text_switcher);
 mSwitcher.setInAnimation(this, android.R.anim.fade_in);
 mSwitcher.setOutAnimation(this, android.R.anim.fade_out);
 Intent intent = new Intent(this, MediaService.class);
 //增加StartService,來增加后臺      功能
 startService(intent);
 // 綁定服務(wù),使用context來綁定
 // 那個界面需要綁定 就用哪個 Activity
 // 參數(shù)1:Intent  代表需要綁定哪一個Service
 // 參數(shù)2:ServiceConnection 回調(diào)接口,可以接收到Service連接成功和斷開的回調(diào),成功就可以取到對象。
 // 綁定服務(wù) 參數(shù)2就是服務(wù)和指定的對象綁定在一起
 bindService(intent, this, BIND_AUTO_CREATE);

 //指針和唱片部分
 initViews();//定義背景圖
 setAnimations();
 }
 private void initViews() {
 playingPre = (ImageView) findViewById(R.id.playing_pre);
 playingPlay = (ImageView) findViewById(R.id.playing_play);
 playingNext = (ImageView) findViewById(R.id.playing_next);
 disc = (ImageView) findViewById(R.id.disc);
 needle = (ImageView) findViewById(R.id.needle);
 playingPre.setOnClickListener(this);
 playingPlay.setOnClickListener(this);
 playingNext.setOnClickListener(this);
 }
 //動畫設(shè)置
 private void setAnimations() {
 discAnimation = ObjectAnimator.ofFloat(disc, "rotation", 0, 360);
 discAnimation.setDuration(20000);
 discAnimation.setInterpolator(new LinearInterpolator());
 discAnimation.setRepeatCount(ValueAnimator.INFINITE);

 needleAnimation = ObjectAnimator.ofFloat(needle, "rotation", 0, 25);
 needle.setPivotX(0);
 needle.setPivotY(0);
 needleAnimation.setDuration(800);
 needleAnimation.setInterpolator(new LinearInterpolator());
 }

 @Override
 public void onClick(View v) {
 int id = v.getId();
 switch (id) {
  case R.id.playing_pre://前一曲
  if (discAnimation != null) {
   discAnimation.end();
   playing();
  }
  break;
  case R.id.playing_play://      中
  if (isPlaying){
   playing();
  }else {
   if (needleAnimation != null) {
   needleAnimation.reverse();
   needleAnimation.end();
   mMusicController.pause();
   }
   if (discAnimation != null && discAnimation.isRunning()) {
   discAnimation.cancel();
   mMusicController.pause();
   float valueAvatar = (float) discAnimation.getAnimatedValue();
   discAnimation.setFloatValues(valueAvatar, 360f + valueAvatar);
   }
   playingPlay.setImageResource(R.drawable.music_play);
   isPlaying = true;
  }
  break;
  case R.id.playing_next://下一曲
  if (discAnimation != null) {
   discAnimation.end();
   playing();
  }
  break;
  default:
  break;
 }
 }

 //      :1、      音樂 2、動畫旋轉(zhuǎn) 3、暫停圖片切換為      按鈕圖片
 private void playing(){
 needleAnimation.start();
 discAnimation.start();
 playingPlay.setImageResource(R.drawable.music_pause);
 mMusicController.play();//      
 isPlaying = false;
 }
//===================================      歌曲服務(wù)開啟、停止、結(jié)束===============================
 @Override
 protected void onStart() {
 super.onStart();
 Thread thread = new Thread(this);
 thread.start();
 }

 @Override
 protected void onStop() {
 running = false;
 super.onStop();
 }

 @Override
 protected void onDestroy() {
 // 解除綁定
 unbindService(this);
 super.onDestroy();
 }

 //---------------------      到當(dāng)前音樂的滑動條及時間設(shè)置--------------------------
 @Override
 public void run() {
 running = true;
 try {
  while (running) {
  if (mMusicController != null) {
   long musicDuration = mMusicController.getMusicDuration();
   final long position = mMusicController.getPosition();
   final Date dateTotal = new Date(musicDuration);
   final SimpleDateFormat sb = new SimpleDateFormat("mm:ss");
   mSeekBar.setMax((int) musicDuration);
   mSeekBar.setProgress((int) position);
   mSwitcher.post(
    new Runnable() {
    @Override
    public void run() {
     Date date = new Date(position);
     String time = sb.format(date) + "/" + sb.format(dateTotal);
     mSwitcher.setCurrentText(time);
    }
    }
   );
  }

  Thread.sleep(500);
  }
 } catch (InterruptedException e) {
  e.printStackTrace();
 }
 }

 //-----------------------------
 //服務(wù)綁定與解除綁定的回調(diào)

 /**
 * 當(dāng)服務(wù)與當(dāng)前綁定對象,綁定成功,服務(wù)onBind方法調(diào)用并且返回之后
 * 回調(diào)給這個方法
 *
 * @param name
 * @param service IBinder 就是服務(wù) onBind 返回的對象
 */
 @Override
 public void onServiceConnected(ComponentName name, IBinder service) {
 mMusicController = ((MediaService.MusicController) service);
 }

 @Override
 public void onServiceDisconnected(ComponentName name) {
 mMusicController = null;
 }

 public void btnStopService(View view) {
 Intent intent = new Intent(this, MediaService.class);
 stopService(intent);
 }

 @Override
 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 }

 @Override
 public void onStartTrackingTouch(SeekBar seekBar) {
 }

 @Override
 public void onStopTrackingTouch(SeekBar seekBar) {
 mMusicController.setPosition(seekBar.getProgress());
 }
}

mediaserver部分的代碼:

package com.example.cungu.musicdemo;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Environment;
import android.os.IBinder;


public class MediaService extends Service {
 private MediaPlayer mPlayer;
 /* 綁定服務(wù)的實(shí)現(xiàn)流程:
 * 1.服務(wù) onCreate, onBind, onDestroy 方法
 * 2.onBind 方法需要返回一個 IBinder 對象
 * 3.如果 Activity 綁定,Activity 就可以取到 IBinder 對象,可以直接調(diào)用對象的方法
 */
 // 相同應(yīng)用內(nèi)部不同組件綁定,可以使用內(nèi)部類以及Binder對象來返回。
 public class MusicController extends Binder {
 public void play() {
  mPlayer.start();//開啟音樂
 }
 public void pause() {
  mPlayer.pause();//暫停音樂
 }
 public long getMusicDuration() {
  return mPlayer.getDuration();//獲取文件的總長度
 }
 public long getPosition() {
  return mPlayer.getCurrentPosition();//獲取當(dāng)前      進(jìn)度
 }
 public void setPosition (int position) {
  mPlayer.seekTo(position);//重新設(shè)定      進(jìn)度
 }
 }
 /**
 * 當(dāng)綁定服務(wù)的時候,自動回調(diào)這個方法
 * 返回的對象可以直接操作Service內(nèi)部的內(nèi)容
 * @param intent
 * @return
 */
 @Override
 public IBinder onBind(Intent intent) {
 return new MusicController();
 }
 @Override
 public void onCreate() {
 super.onCreate();
 mPlayer = MediaPlayer.create(this, R.raw.yinyue1);
 }
 /**
 * 任意一次unbindService()方法,都會觸發(fā)這個方法
 * 用于釋放一些綁定時使用的資源
 * @param intent
 * @return
 */
 @Override
 public boolean onUnbind(Intent intent) {
 return super.onUnbind(intent);
 }
 @Override
 public void onDestroy() {
 if (mPlayer.isPlaying()) {
  mPlayer.stop();
 }
 mPlayer.release();
 mPlayer = null;
 super.onDestroy();
 }
}

到此,這一個簡易的音樂 器,就完成了。

但是一個音樂 器,至少 的音樂不會只有一首,所以,可以考慮試做一個本地音樂 器,讀取本地的音樂!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:擁抱kotlin之如何習(xí)慣使用kotlin高階函數(shù)

欄    目:Android

下一篇:Android自定義gridView仿頭條頻道拖動管理功能

本文標(biāo)題:Android開發(fā)簡易音樂 器

本文地址:http://mengdiqiu.com.cn/a1/Android/8971.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有