当按钮图像改变时,选择器不在gridview上工作

时间:2014-04-25 11:08:20

标签: android button gridview selector

我有一个gridview。我在LinearLayout两项LinearLayoutImageView中设置了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);
    }
}

2 个答案:

答案 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);
         }