I was trying to do this music player app.
I've created a relative layout for each position in a 2x2 grid layout, and inside each relative layout, I put one seekbar and one button. For each button I'd like to play a different music, and the seekbar above the button should be used to set the music position.
Also, I've used tags to determine which button has been pressed.
After I've done the interface I've started implementing the onPress method, it just won't work and I'm not really sure how to specify the seekbar that will be active when a certain music is playing... here is my code so far, showing an error in line 27 ( ImageView counter = (ImageView) view;
) and crashing when I click any button:
package com.victorpietro.musicproject;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
int musicPlaying = 0;
AudioManager audioManager;
MediaPlayer mplayer;
SeekBar scrubber;
public void onPress(View view){
ImageView counter = (ImageView) view;
int tag = Integer.parseInt(counter.getTag().toString());
Log.i("Tag", counter.getTag().toString());
switch (tag){
case 1:
scrubber = (SeekBar)findViewById(R.id.seekBar);
mplayer = MediaPlayer.create(this, R.raw.house);
musicPlaying = 1;
break;
case 2:
scrubber = (SeekBar)findViewById(R.id.seekBar2);
mplayer = MediaPlayer.create(this, R.raw.techno);
musicPlaying = 2;
break;
case 3:
scrubber = (SeekBar)findViewById(R.id.seekBar3);
mplayer = MediaPlayer.create(this, R.raw.deephouse);
musicPlaying = 3;
break;
case 4:
scrubber = (SeekBar)findViewById(R.id.seekBar4);
mplayer = MediaPlayer.create(this, R.raw.chill);
musicPlaying = 4;
break;
}
scrubber.setMax(mplayer.getDuration());
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run(){
scrubber.setProgress(mplayer.getCurrentPosition());
}
}, 0, 100);
scrubber.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mplayer.seekTo(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
if(mplayer.isPlaying()) {
mplayer.pause();
}
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if(!(mplayer.isPlaying())) {
mplayer.start();
}
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
}
}
And here the xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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"
android:background="@android:color/background_dark"
tools:context="com.victorpietro.musicproject.MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="320dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginBottom="200dp"
android:layout_marginEnd="32dp"
android:layout_marginRight="32dp"
android:background="@android:color/black"
android:padding="8dp"
android:text="MUSIC STYLE PLAYER"
android:textAlignment="center"
android:textColor="#ffffff"
android:textSize="26sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<GridLayout
android:id="@+id/gridLayout"
android:layout_width="fill_parent"
android:layout_height="347dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:columnCount="2"
android:rowCount="2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/seekBar">
<RelativeLayout
android:id="@+id/r_layout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_row="0"
android:layout_rowWeight="1">
<Button
android:id="@+id/button"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/imageView"
android:layout_alignStart="@+id/imageView"
android:layout_centerVertical="true"
android:onClick="onPress"
android:tag="1"
android:text="House" />
<ImageView
android:id="@+id/imageView"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_above="@+id/button"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:background="@android:color/background_light"
app:srcCompat="@drawable/houseimg" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/r_layout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_row="0"
android:layout_rowWeight="1">
<Button
android:id="@+id/button2"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:onClick="onPress"
android:tag="2"
android:text="Techno" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_above="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_marginTop="20dp"
android:background="@android:color/background_light"
app:srcCompat="@drawable/technoimg" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/r_layout3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_row="1"
android:layout_rowWeight="1">
<Button
android:id="@+id/button3"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:onClick="onPress"
android:tag="3"
android:text="Deep House" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="150dp"
android:layout_height="70dp"
android:layout_above="@+id/button3"
android:layout_alignLeft="@+id/button3"
android:layout_alignStart="@+id/button3"
android:layout_marginTop="20dp"
android:background="@android:color/background_light"
android:padding="5dp"
app:srcCompat="@drawable/deephouseimg" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/r_layout4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_columnWeight="1"
android:layout_gravity="fill_horizontal"
android:layout_row="1"
android:layout_rowWeight="1">
<Button
android:id="@+id/button4"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:onClick="onPress"
android:tag="4"
android:text="Chill Out" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="150dp"
android:layout_height="70dp"
android:layout_above="@+id/button4"
android:layout_alignLeft="@+id/button4"
android:layout_alignStart="@+id/button4"
android:layout_marginTop="20dp"
android:background="@android:color/background_light"
android:padding="3dp"
app:srcCompat="@drawable/chillimg" />
</RelativeLayout>
</GridLayout>
<SeekBar
android:id="@+id/seekBar"
android:layout_width="125dp"
android:layout_height="wrap_content"
android:layout_above="@+id/gridLayout"
android:layout_marginEnd="50dp"
android:layout_marginRight="50dp"
android:layout_marginStart="40dp"
android:layout_marginLeft="40dp"
android:layout_marginTop="82dp"
android:background="@android:color/background_light"
app:layout_constraintBottom_toTopOf="@+id/gridLayout"
app:layout_constraintEnd_toStartOf="@+id/seekBar2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<SeekBar
android:id="@+id/seekBar2"
android:layout_width="125dp"
android:layout_height="wrap_content"
android:layout_above="@+id/gridLayout"
android:layout_marginEnd="40dp"
android:layout_marginRight="50dp"
android:layout_marginTop="100dp"
android:background="@android:color/background_light"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/seekBar"
app:layout_constraintTop_toTopOf="parent" />
<SeekBar
android:id="@+id/seekBar3"
android:layout_width="125dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="16dp"
android:layout_marginEnd="51dp"
android:layout_marginRight="51dp"
android:layout_marginLeft="42dp"
android:layout_marginStart="42dp"
android:background="@android:color/background_light"
app:layout_constraintBottom_toBottomOf="@+id/gridLayout"
app:layout_constraintEnd_toStartOf="@+id/seekBar4"
app:layout_constraintStart_toStartOf="parent" />
<SeekBar
android:id="@+id/seekBar4"
android:layout_width="125dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="16dp"
android:layout_marginRight="41dp"
android:layout_marginEnd="41dp"
android:background="@android:color/background_light"
app:layout_constraintBottom_toBottomOf="@+id/gridLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/seekBar3" />
</android.support.constraint.ConstraintLayout>
Error Log:
FATAL EXCEPTION: main Process: com.victorpietro.musicproject, PID: 12799 java.lang.IllegalStateException: Could not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.widget.ImageView at com.victorpietro.musicproject.MainActivity.onPress(MainActivity.java:27) at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
this will do the trick here! don't touch your xml at all and do these in your app's java code side
public void onPress(View view){
// get the view item's ID which in your case will be the button's id and use a switch case on it
int id = view.getId()
switch (id){
case R.id.button:
scrubber = (SeekBar)findViewById(R.id.seekBar);
mplayer = MediaPlayer.create(this, R.raw.house);
musicPlaying = 1;
break;
case R.id.button2:
scrubber = (SeekBar)findViewById(R.id.seekBar2);
mplayer = MediaPlayer.create(this, R.raw.techno);
musicPlaying = 2;
break;
case R.id.button3:
scrubber = (SeekBar)findViewById(R.id.seekBar3);
mplayer = MediaPlayer.create(this, R.raw.deephouse);
musicPlaying = 3;
break;
case R.id.button4:
scrubber = (SeekBar)findViewById(R.id.seekBar4);
mplayer = MediaPlayer.create(this, R.raw.chill);
musicPlaying = 4;
break;
}
Your logcat clearly says what the error is. Kindly go through the logcat and find out in which line no. error is. Here
java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.widget.ImageView at com.victorpietro.musicproject.MainActivity.onPress(MainActivity.java:27)
it says at line no. 27 you have used a AppCompatButton
but while initializing it you have used ImageView. You need to use AppCompatButton
not imageView. Hence instead of using
ImageView counter = (ImageView) view;
use Button counter=(Button) view;
most probably it should work.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.