您的位置:首页 > 移动开发 > Android开发

listview实现跑马灯效果,和焦点获取

2015-08-29 17:51 465 查看
ListView中经常需要让条目出现动画效果,跑马灯就是一种。

listview可以基于万能适配器开发,地址:

http://blog.csdn.net/lmj623565791/article/details/38902805

如果要将整个listview都进行跑马灯比较容易。

首先自定义一个View,叫ItemTextView,代码如下:

package com.example.list;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class ItemTextView extends TextView {
public ItemTextView(Context context) {
super(context);
}

public ItemTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public ItemTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public boolean isFocused() {
return true;
}
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);

}

}


然后在xml文件的Listview中填入android:focusable=”true”;保持焦点。

在item.xml中需要加入android:singleLine=”true”

和android:ellipsize=”marquee”,也可以加入其他跑马灯属性,比如跑马灯的次数等android:marqueeRepeatLimit=”marquee_forever”。

这样就可以整个listview都开始跑马灯效果了。

但是如何让选中的item进行跑马灯,选中另一个,上一个不进行动画小工呢?

这时候在MainActivity中需要添加两个方法:

mListView.setOnItemSelectedListener(new OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> arg0, View view,
int position, long id) {
if(position == id){
mTextView = (TextView) view.findViewById(R.id.tv_describe);
view.isFocusableInTouchMode();
view.requestFocusFromTouch();
mTextView.setEllipsize(TruncateAt.MARQUEE);

}
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub

}
});
mListView.setOnFocusChangeListener(new OnFocusChangeListener() {

@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {

}else{
mTextView.setEllipsize(TruncateAt.END);
//这里可以选择别的样式,需要将原来在item.xml文件中的android:ellipsize="marquee"去掉。
}
}
});

}


这样就实现了点击哪个item哪个动,其他不动的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息