2014-04-25 3 views
0

gridview가 있습니다. 그 안에 내가 LinearLayoutLinearLayout 두 항목 ImageViewTextView에 설정되어 있습니다. gridview의 항목 하나에서 선택자를 설정하려고합니다. 난 다음이 항목을 보여줍니다있는 gridview의 항목 선택을 설정하고 는 selecteb입니다하지만 난에 클릭하면 **Button 다음 gridview 항목을 선택 취소하고 선택기가 숨겨져 재생합니다. **버튼 이미지가 변경되면 선택기가 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

당신은 같은 것을 사용할 수 있습니다

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(210) - How to display album art for MP3?
- Get embedded cover art from a mp3 file

-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); 
     } 
관련 문제