创建工程配置相应的环境,这里我们用到了RecyclerView做条目加载器,和引用到自定义Textview跑马灯效果,每个都获取焦点,展示其效果。
有配置:
compile 'com.android.support:recyclerview-v7:24.2.1'
布局,简单的xml,这里我需要的高度为这些,跟据各人需要设置
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_common"
android:layout_width="match_parent"
android:layout_height="83dp"
android:overScrollMode="never"
android:scrollbars="none" />
然后就是熟知的找控件,省略。。。。
adapte = new DialogAdapteList(mActivity, (List<String>) mlist);
// LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mActivity);
// linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
// lvList.setLayoutManager(linearLayoutManager);
lvList.setLayoutManager(new GridLayoutManager(mActivity, 3));
lvList.setHasFixedSize(true);
lvList.setAdapter(adapte);
adapte.setOnItemClickLitener(new DialogAdapteList.OnItemClickLitener() {
@Override
public void onItemClick(View itemView, int position, ImageView ivitemView) {
adapte.setSelected(position);
adapte.notifyDataSetChanged();
}
});
条目样式设置,简单设置下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:clickable="true"
android:padding="5dp">
<ImageView
android:id="@+id/iv_view"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/down" />
<com.pax.th.view.MarqueeTextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:marqueeRepeatLimit="marquee_forever"
android:text="123"
android:textSize="16sp" />
</LinearLayout>
adapter写入方式
private List<String> data;
private Context context;
public final LayoutInflater layoutInflater;
public int selected = -1;
public boolean down = false;
public DialogAdapteList(Context context, List<String> data) {
this.context = context;
this.data = data;
layoutInflater = LayoutInflater.from(context);
}
public void setSelected(int i) {
this.selected = i;
}
private OnItemClickLitener mOnItemClickLitener;
public interface OnItemClickLitener {
void onItemClick(View itemView, int position, ImageView ivitemView);
}
public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {
this.mOnItemClickLitener = mOnItemClickLitener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.item_list, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final String appData = data.get(position);
holder.itemName.setText(appData);
if (selected == position) {
holder.ivitemView.setImageResource(R.drawable.down_up);
} else {
holder.ivitemView.setImageResource(R.drawable.down);
}
if (mOnItemClickLitener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickLitener.onItemClick(holder.itemView, position, holder.ivitemView);
}
});
}
}
@Override
public int getItemCount() {
return data.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView ivitemView;
MarqueeTextView itemName;
public ViewHolder(View itemView) {
super(itemView);
ivitemView = (ImageView) itemView.findViewById(R.id.iv_view);
itemName = (MarqueeTextView) itemView.findViewById(R.id.tv_name);
}
}