gpt4 book ai didi

android - 用于 ListView 的自定义适配器内的动画按钮

转载 作者:行者123 更新时间:2023-11-30 00:13:37 24 4
gpt4 key购买 nike

我用我自己的布局制作了一个带有自定义适配器的 ListView,在这个布局上有一个 TextView 、一个按钮和三个图像按钮,它们首先是 setVisibility.GONE 我正在尝试为该按钮设置动画,以便当用户单击它时,它会从右向左更改其位置,以便为三个图像按钮留出空间。

问题是,动画正在运行的唯一项目是列表中的最后一项。我希望动画适用于所有项目。

这是我的适配器的代码:

public class ListaAdapter extends BaseAdapter implements ListAdapter {

private ArrayList<String> list = new ArrayList<String>();
private Context context;
private ListView lista;
private Button btnAbrir;
private RelativeLayout relativeLayout;
private ObjectAnimator animation;


public ListaAdapter (ArrayList<String> list, Context context, ListView a) {
this.list = list;
this.context = context;
this.lista = a;


}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int pos) {
return list.get(pos);
}

@Override
public long getItemId(int pos) {
return 0;
//just return 0 if your list items do not have an Id variable.
}

@Override
public View getView(final int position, View convertView, ViewGroup
parent)
{
View view = convertView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.custom_list, null);
}

TextView listItemText = (TextView)view.findViewById(R.id.textoItem);
listItemText.setText(list.get(position));

final LinearLayout btnLayout = (LinearLayout)
view.findViewById(R.id.btnLayout);

relativeLayout = (RelativeLayout) view.findViewById(R.id.layout);

btnAbrir = (Button)view.findViewById(R.id.btnAbrir);

ImageButton btnNaoSei = (ImageButton)view.findViewById(R.id.btnNaoSei);

ImageButton btnAceitar =
(ImageButton)view.findViewById(R.id.btnAceitar);

ImageButton btnNegar = (ImageButton)view.findViewById(R.id.btnNegar);

animation = ObjectAnimator.ofFloat(btnAbrir,"x",200);

btnLayout.setVisibility(View.GONE);

btnAbrir.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {

btnLayout.setVisibility(View.VISIBLE);

animate();
}
});



return view;
}

private void animate()
{
animation.setDuration(500);
animation.start();
}
}

这是我的 custom_list.xml 布局:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:animateLayoutChanges="true">

<RelativeLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="@color/white">

<LinearLayout
android:id="@+id/btnLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:orientation="horizontal">

<RelativeLayout
android:layout_width="@dimen/_32sdp"
android:layout_height="@dimen/_50sdp"
android:background="@color/compras_barra">

<ImageButton
android:id="@+id/btnNaoSei"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="false"
android:layout_alignParentStart="false"
android:layout_alignParentTop="false"
android:backgroundTint="@color/compras_barra"
android:contextClickable="false"
app:srcCompat="@drawable/a12" />

<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnNaoSei"
android:layout_centerHorizontal="true"
android:text="NÃO SEI"
android:textColor="@color/white"
android:textSize="8sp" />

</RelativeLayout>

<RelativeLayout
android:layout_width="@dimen/_32sdp"
android:layout_height="@dimen/_50sdp"
android:background="@color/compras">

<ImageButton
android:id="@+id/btnAceitar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="11dp"
android:background="@color/compras"
app:srcCompat="@drawable/a11" />

<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/btnAceitar"
android:paddingEnd="@dimen/_3sdp"
android:paddingTop="@dimen/_8sdp"
android:text="ACEITAR"
android:textColor="@color/white"
android:textSize="8sp" />

</RelativeLayout>

<RelativeLayout
android:layout_width="@dimen/_32sdp"
android:layout_height="@dimen/_50sdp"
android:background="@color/compras_texto2">

<ImageButton
android:id="@+id/btnNegar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:background="@color/compras_texto2"
app:srcCompat="@drawable/a10" />

<TextView
android:id="@+id/textView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="12dp"
android:paddingBottom="@dimen/_1sdp"
android:text="NEGAR"
android:textColor="@color/white"
android:textSize="8sp" />

</RelativeLayout>

</LinearLayout>

<Button
android:id="@+id/btnAbrir"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/a09"
android:layout_alignTop="@+id/textoItem"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<TextView
android:id="@+id/textoItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_10sdp"
android:layout_marginTop="@dimen/_10sdp"
android:maxWidth="200dp"
android:text="TextView"
android:textColor="@color/compras_texto2" />
</RelativeLayout>

关于如何实现这个的任何想法?提前致谢。

最佳答案

你需要的东西采用下面的方法,创建一个ViewHolder,这样你的适配器就会知道List中每一行的每个元素

该行的最后一个 UI 元素只有动画,因为当他在您的 中创建 View 时,这是您的 Adapater 唯一已知的组件 id列表。所以它将为最后一行元素设置动画

您必须在 Adapter 中添加 ViewHolder 嵌套的 class 并声明您的 UI 组件。在 getView

中使用 setTaggetTag 方法

总的来说,你必须在 getView 中创建你的 adapter 东西

public class SListAdapter extends ArrayAdapter<String> {

private Context context;
private String[] seCtnColors;
private List<Subscription> item;
private ViewHolder mainViewHolder = null;
private ViewHolder viewHolder;
private LayoutInflater inflater;
private View row;

public SListAdapter(Context c, List<Subscription> subscriptions)
{
super(c, R.layout.row,R.id.rowNameTV);
this.context=c;
this.item = subscriptions;
}


@Override
public int getCount() {
return this.item.size();
}

@Override
public View getView(final int position, final View convertView, ViewGroup parent) {
row = null;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row,parent,false);
viewHolder = new ViewHolder();
initAdapterUI();
setAdapterDataset(position);

return row;
}

private void initAdapterUI() {

viewHolder.animatedGifViewHol = row.findViewById(R.id.row_animated_gif);
viewHolder.alertBarVerticalViewHol = row.findViewById(R.id.alertBarVerticalView);
viewHolder.firstNameTVHol = (TextView) row.findViewById(R.id.rowNameTV);
viewHolder.phoneNumberTVHol = (TextView) row.findViewById(R.id.rowNumberTV);
viewHolder.switchStateTVHol = (TextView) row.findViewById(R.id.switchStateTV);
row.setTag(viewHolder);
}

private void setAdapterDataset(int position) {
mainViewHolder = (ViewHolder) row.getTag();
mainViewHolder.alertBarVerticalViewHol.setBackgroundColor(Color.RED);
mainViewHolder.switchStateTVHol.setTextColor(Color.RED);
mainViewHolder.firstNameTVHol.setText(item.get(position).getFirstName());
mainViewHolder.phoneNumberTVHol.setText(item.get(position).getNumber());
}

public class ViewHolder{
View animatedGifViewHol;
View alertBarVerticalViewHol;
TextView firstNameTVHol;
TextView switchStateTVHol;
TextView phoneNumberTVHol;
}
}

关于android - 用于 ListView 的自定义适配器内的动画按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47715345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com