私はこのすべてに慣れていますので、私はこのアプリを書くために始めました。Androidの断片では、音はonClickイベントの後に再生されません
このアプリはクリック可能な6つの画像から始まり、一連の「スワイプル」画面で構成された2次アクティビティにつながり、クリックしたときに音が鳴る画像が表示されます。ここで生成された画面に必要な二次及び断片コードのコードは次のとおり
SecondaryPage.java
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
public class SecondaryPage extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.secondary);
// Find the view pager that will allow the user to swipe between fragments
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
// Create an adapter that knows which fragment should be shown on each page
SimpleFragmentPagerAdapter adapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager());
// Set the adapter onto the view pager
viewPager.setAdapter(adapter);
}
}
SimpleFragmentAdapter.java
AnimalsFragement.java(Croc()
とCamel()
はを除いて、同一であります名前)
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import static com.example.testfrags.R.layout.animals;
public class AnimalsFragment extends Fragment {
private ImageView imageView;
private MediaPlayer mp;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = null;
//Inflating View to access it's resources
v = inflater.inflate(animals, container, false);
Log.i("AnimalsFragment", "mp before playing: " + mp);
//creating clickable image
imageView = (ImageView) v.findViewById(R.id.jungle_animals);
// Sound played once clicked
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Start playback.
mp = MediaPlayer.create(getActivity(), R.raw.lioncub2);
Log.i("AnimalsFragment", "mp: " + mp);
mp.start();
mp.stop();//Stops playback - added precaution
// release media resources
releaseMediaPlayer();
Log.i("AnimalsFragment", "mp after release: " + mp);
// Little msg confirm end of sound
Toast.makeText(v.getContext(), "Questo era il Leoncino", Toast.LENGTH_SHORT).show();
}
});
return v;
} // end of onCreatView
/**
* Clean up the media player by releasing its resources.
*/
private void releaseMediaPlayer() {
// If the media player is not null, then it may be currently playing a sound.
if (mp != null) {
// Regardless of the current state of the media player, release its resources
// because we no longer need it.
mp.reset();
mp.release();
// Set the media player back to null.
} // end of if
} // end of releaseMediaPlayer
@Override
public void onStop() {
super.onStop(); // Always call the superclass method first
releaseMediaPlayer();
}
}
これらはxmlファイルです。 秒
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
animals.xml(croc.xmlとcamel.xmlが同じである)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/jungle_animals"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/lion"/>
</LinearLayout>
ondary.xmlアプリのコンパイルおよび実行されますが、私は何も音がでない任意のフラグメントに任意の画像をクリックすると演奏された。私は私のデバイスでエミュレートしたが、何も試していない。
どうしたのですか?私はラインでv.getContext()
でgetActivity()
を変更しようとしている
:
`mp = MediaPlayer.create(getActivity(), R.raw.lioncub2);`
が、何も変わりません。 すべてのサウンドファイルはmp3です。私は、mp3ファイルが正常に動作し、正常に再生されているかどうかを確認するために、3つの画像を含むフラグメントを除いたsecondaryPage.javaのバージョンも作成しました。 また、メソッドが機能しているかどうかを確認するために、Toast
というメッセージを挿入しました。 デバッグしてmp = MediaPlayer.create(getActivity(), R.raw.lioncub2);
行に進み、続行するとサウンドが再生されます。任意の助けを事前に
10-15 10:50:36.962 2459-2459/com.example.testfrags I/Croc: mp before playing: null
10-15 10:50:37.682 2459-2459/com.example.testfrags I/Choreographer: Skipped 36 frames! The application may be doing too much work on its main thread.
10-15 10:50:39.472 2459-2459/com.example.testfrags I/AnimalsFragment: mp: [email protected]
10-15 10:50:39.482 2459-2459/com.example.testfrags I/AnimalsFragment: mp after release: null
ありがとう:
はここLog.i文の出力であります!
ありがとうございました。私はstopメソッドを削除しましたが、何も変わりませんでした。以前のMediaPlayer(フラグメントコーディングなし)はファイルの再生に問題がなかったので、なぜ今は動作していないのか分かりません。 – BletchleyP
私はあなたが最初に答えを与えるでしょう、彼らは短くて長い再生されたいオーディオのタイプを教えてください? –
それはあなたにとても親切です。オーディオファイルはmp3ファイルの動物の音です。長すぎないようにしてください。 – BletchleyP