我有一个gridview。我在LinearLayout
两项LinearLayout
和ImageView
中设置了TextView
。
我想在gridview的一个项目上设置选择器。
当我在gridview的项目上设置选择器时,它显示项目是selecteb但是当我点击**播放 Button
时,取消选择gridview
项目并且选择器是隐藏。**
按钮图像更改时完成。如果我没有更改按钮图像,那么选择器正在工作。 但我想按钮。
all_song.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffddff"
android:orientation="vertical" >
<GridView
android:id="@+id/gvAllSong"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:choiceMode="singleChoice"
android:horizontalSpacing="10dp"
android:listSelector="@drawable/list_selector"
android:numColumns="3"
android:padding="5dp" >
</GridView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="9"
android:background="#ff6600"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/btnPlay"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.5"
android:background="@null"
android:src="@drawable/btn_play" />
<SeekBar
android:id="@+id/songProgressBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_weight="5"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:progressDrawable="@drawable/seekbar_progress"
android:thumb="@drawable/seek_handler" />
<SeekBar
android:id="@+id/sbVolume"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5" />
</LinearLayout>
</LinearLayout>
AllSongActivity.java
public class AllSongActivity extends Activity implements OnClickListener,
OnItemClickListener, OnCompletionListener {
private GridView gvAllSong;
public ImageButton btnPlay;
private SeekBar sbVolume;
private SeekBar songProgressBar;
private MediaPlayer mp;
private SongsManager plm;
private Utilities utils;
private AudioManager audioManager;
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();
private ArrayList<com.prakash.musicdemo.baseadapter.RowItem> rowItems;
private com.prakash.musicdemo.baseadapter.CustomBaseAdapter baseadapter;
private boolean isRepeat = false;
private Handler mHandler = new Handler();
private int currentSongIndex = 0;
SharedPreferences preferences;
int index = 0;
private String TAG="SELECTED";
private int prevPos = -1;
private OpenDatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO onCreate Method
super.onCreate(savedInstanceState);
setContentView(R.layout.all_songs);
bindView();
init();
addlistner();
db = new OpenDatabaseHelper(AllSongActivity.this);
rowItems = new ArrayList<com.prakash.musicdemo.baseadapter.RowItem>();
this.songsList = plm.getPlayList();
for (int i = 0; i < songsList.size(); i++) {
final String Song_Paths = songsList.get(i).get("songPath");
final String Song_names = songsList.get(i).get("songTitle");
RowItem item = new RowItem(Song_names, Song_Paths, i % 10);
rowItems.add(item);
}
baseadapter = new com.prakash.musicdemo.baseadapter.CustomBaseAdapter(
this, rowItems);
gvAllSong.setAdapter(baseadapter);
;
}
private void isMusicPlay() {
if (mp.isPlaying()) {
songProgressBar.setEnabled(true);
} else {
songProgressBar.setEnabled(false);
}
}
public void init() {
// TODO init()
mp = new MediaPlayer();
plm = new SongsManager();
utils = new Utilities();
// Listeners
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
}
public void bindView() {
// TODO bindView()
gvAllSong = (GridView) findViewById(R.id.gvAllSong);
sbVolume = (SeekBar) findViewById(R.id.sbVolume);
btnPlay = (ImageButton) findViewById(R.id.btnPlay);
songProgressBar = (SeekBar) findViewById(R.id.songProgressBar);
}
public void addlistner() {
// TODO addlistner
gvAllSong.setOnItemClickListener(AllSongActivity.this);
btnPlay.setOnClickListener(AllSongActivity.this);
songProgressBar.setOnSeekBarChangeListener(this);
mp.setOnCompletionListener(this);
}
public void playSong(int songIndex) {
// TODO playSOng
// Play song
try {
mp.reset();
mp.setDataSource(songsList.get(songIndex).get("songPath"));
mp.prepare();
mp.start();
isMusicPlay();
btnPlay.setImageResource(R.drawable.btn_pause);
songProgressBar.setProgress(0);
songProgressBar.setMax(100);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onClick(View view) {
// TODO OnClick
switch (view.getId()) {
case R.id.btnPlay:
if (mp.isPlaying()) {
if (mp != null) {
mp.pause();
// Changing button image to play button
btnPlay.setImageResource(R.drawable.btn_play);
}
} else {
// Resume song
if (mp != null) {
mp.start();
// Changing button image to pause button
btnPlay.setImageResource(R.drawable.btn_pause);
}
}
break;
default:
break;
}
}
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO OnCompletion
// check for repeat is ON or OFF
if (isRepeat) {
// repeat is on play same song again
playSong(currentSongIndex);
} else {
// no repeat or shuffle ON - play next song
if (currentSongIndex < (songsList.size() - 1)) {
// playSong(currentSongIndex + 1);
// currentSongIndex = currentSongIndex + 1;
} else {
// play first song
playSong(0);
currentSongIndex = 0;
}
}
}
@SuppressLint("NewApi")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
isRepeat = false;
view.setBackgroundResource(R.drawable.list_selector);
baseadapter.notifyDataSetChanged();
currentSongIndex = position;
playSong(currentSongIndex);
}
}
答案 0 :(得分:0)
您可以使用以下内容:
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(songsList.get(index).get("songPath"));
byte[] artBytes = mmr.getEmbeddedPicture();
if(artBytes != null)
{
InputStream is = new ByteArrayInputStream(mmr.getEmbeddedPicture());
Bitmap bm = BitmapFactory.decodeStream(is);
imgArt.setImageBitmap(bm);
}
else
{
imgArt.setImageDrawable(getResources().getDrawable(R.drawable.adele));
}
但是还有更多的主题可供选择:
- Get embedded mp3 file embedded art failed
- How to display album art for MP3?
- Get embedded cover art from a mp3 file
答案 1 :(得分:-1)
// get thumbnail from song
BitmapFactory.Options bfo=new BitmapFactory.Options();
Bitmap bitmap2;
//here comtex is appliction context may use this.getResources()
Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.timthumb0875);
Bitmap bitmap3 = Bitmap.createScaledBitmap(bmp, 125, 125, true);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(rowItem.getPath());
byte[] rawArt = mmr.getEmbeddedPicture();
if ( rawArt != null) {
bitmap2=BitmapFactory.decodeByteArray(rawArt, 0, rawArt.length, bfo);
bitmap2 = Bitmap.createScaledBitmap(bitmap2, 125, 125, true);
//set bitmap on your imageview
holder.imageView.setImageBitmap(bitmap2);
// detail.setIcon(bitmap2);
} else {
//set bitmap on your imageview
holder.imageView.setImageBitmap(bitmap3);
//detail.setIcon(bitmap3);
}