【Android特效一】listview固定选中一项,整个列表上移下移。

现在用android adt做界面,遇到一些问题,解决了一些问题,在这里捋顺一下思路。

一、实现如下效果。

原先的思路: 在adapter的getview中修改position

	private List<String> list;//存放音乐的路径,这里一共9个,都是从sd卡读取,路径名为:mnt/sdcard/music/idontwanttoleaveyoulone_mayday(歌名).map3
	private List<String> temp;//存放鼠标点击前的音乐路径
        list = new ArrayList<String>();
	temp= new ArrayList<String>();

重写adapter

	class MusicListAdapter extends BaseAdapter {
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return list.size();
		}
		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub	
			return list.get(position);
		}
		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}
		@SuppressLint("NewApi")
		@SuppressWarnings({ "deprecation", "unused" })
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			
			if (convertView == null) {
				convertView = getLayoutInflater().inflate(R.layout.list_item,
						null);
			}
			TextView tv_music_name = (TextView) convertView
					.findViewById(R.id.textView1_music_name);
			tempe=position;
			
			tempe=position+orienIndex;
			if(tempe>list.size()){
				tempe=tempe%list.size();
			}
			else if(tempe<0){
				tempe=list.size()+tempe;
			}
			list.set(position,temp.get(tempe));
				
			//*********************************修改播放列表显示
			tv_music_name.setTextColor(Color.WHITE);
			tv_music_name.setText(list.get(position).substring(18).replace(".mp3", " ").replace("_", "-"));

			return convertView;
		}
}	
重写onitemclick

	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		temp.clear();
		currIndex = position;//		
		orienIndex=currIndex-FIXMUSICINDEX;//FIXMUSICINDEX表示固定播放第几行,这里为5
		temp.addAll(list);
//***************************************
		ma.notifyDataSetInvalidated();  
//***************************************
		start();
	}
报错:

FATAL EXCEPTION: main
java.lang.IndexOutOfBoundsException: Invalid index 9, size is 9
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.example.musicly.MainActivity$MusicListAdapter.getView(MainActivity.java:157)

INDEX越界。

后来看到一个帖子说,这里是修改了adapter中所有内容,所以应该重新setadapter。于是在onitemclick中重新setadapter。报不同步错误。网上说因为setadapter没有在主线程中。应该listview.request一下,这里都没用。

后来想到在onitemclick中修改adapter的list内容,listview不变,只修改list中String内容。修改如下:

adapter中的getView改写如下:

public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
                                convertView = getLayoutInflater().inflate(R.layout.list_item,
                                                null);
                        }
                        TextView tv_music_name = (TextView) convertView
                                        .findViewById(R.id.textView1_music_name);        
                        int testposition=position;
                        //*********************************修改播放列表显示
                        tv_music_name.setTextColor(Color.WHITE);
                        tv_music_name.setText(list.get(position).substring(18).replace(".mp3", " ").replace("_", "-"));
                        if(position==FIXMUSICINDEX){//位置FIXMUSICINDEX固定被选中
                                tv_music_name.setAlpha(255);
                                tv_music_name.setTextSize(23);
                                tv_music_name.setTextColor(Color.rgb(30, 144, 255));
                                tv_music_name.setBackgroundResource(R.drawable.colorchange);
                        }
                        else
                        {
                                tv_music_name.setAlpha(100);
                                tv_music_name.setTextSize(19);                        
                        }                        
                        return convertView;
                }        
        }//**end MusicListAdapter

只在FIXMUSICINDEX ITEM项中设置背景,当不是该索引时,其他索引要重设背景,清除上个状态。
这里文字下移效果没实现,一点击FIXMUSICINDEX上面的音乐,所有音乐都消失了。上移可以完成,原因待寻找。

重写的onitemclick:

@Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                temp.clear();
                orienIndex=position-FIXMUSICINDEX;
                temp.addAll(list);
                list.clear();
                for(int i=0;i<temp.size();i++){
                        tempe=i+orienIndex;
                        if(tempe>=list.size()){
                                tempe=tempe%temp.size();
                        }
                        else if(tempe<0){
                                tempe=temp.size()+tempe;
                        }
                        if(tempe<temp.size())
                                list.add(temp.get(tempe));
                        currIndex=FIXMUSICINDEX;
                }
//***************************************
                ma.notifyDataSetInvalidated();  
//***************************************
                start();
        }

另:

自定义动画步骤:

Animation myAnimation;
myAnimation = AnimationUtils.loadAnimation(this, R.anim.ani_in);
myImageView = (ImageView)findViewById(R.id.myImageView);
myImageView.startAnimation(myAnimation);






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值