ListView 中的可选 TextView(缺少动画)

Posted

技术标签:

【中文标题】ListView 中的可选 TextView(缺少动画)【英文标题】:Selectable TextView in a ListView (Animation missing) 【发布时间】:2012-06-24 18:48:00 【问题描述】:

我用自定义适配器构建了一个 ListView,这样我就有了一个 Checkbox(当时不可见)和一个 TextView 来显示一些文本。

现在我想在列表中选择一个项目时有漂亮的动画(当你触摸元素时背景是蓝色的)。这可能吗?

我已经添加了一个 OnLongTouchListener,它可以工作,但没有动画!

得到一些帮助会很酷:)

布局-XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="horizontal" >

    <CheckBox
        android:id="@+id/list_checkbox"
        android:layout_
        android:layout_
        android:checked="false"
        android:visibility="gone"
        android:text="" 
        android:focusable="false"
        android:clickable="false">
    </CheckBox>

    <TextView
        android:id="@+id/list_text"
        android:layout_
        android:layout_
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text=""
        android:clickable="true"
        android:longClickable="true" >
    </TextView>

</LinearLayout>

Java 代码:

private class CommunityListAdapter extends ArrayAdapter<Community> 

    private List<Community> items;
    private Context context;

    public CommunityListAdapter(Context context, List<Community> communities) 
        super(context, R.layout.list_item, communities);
        this.items = communities;
        this.context = context;
    

    @Override
    public View getView(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.list_item, null);
        

        Community item = items.get(position);
        if(item != null) 
            TextView textView = (TextView) view.findViewById(R.id.list_text);
            if(textView != null) 
                textView.setText(item.getName());
                textView.setOnLongClickListener(new OnLongClickListener() 

                    public boolean onLongClick(View view) 
                        startActionMode(new MultiChoiseCABListener());
                        Toast.makeText(context, "TEST", 10).show();
                        return false;
                    

                );
            
        

        return view;
    

【问题讨论】:

我用一些代码编辑了这个问题! 【参考方案1】:

在您的可绘制对象中创建按下状态 xml,您可以在其中设置不同的位图以在不同的点击状态下显示,并将该 xml 设置为您的主要布局背景。

示例状态 xml。

list_item_bg_state.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item  android:state_pressed="true" android:drawable="@drawable/blue_bg" />
    <item android:drawable="@drawable/white_bg"/>
</selector>

其中 blue_bg 和 white_bg 是可绘制对象中的两个.png 图像。

注意上面的 xml 应该在你的 drawables 文件夹中。现在将此 xml 设置为列表项主布局的背景。喜欢,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@drawable/list_item_bg_state"
    android:orientation="horizontal" >
</LinearLayout>

问候, 阿奇夫

【讨论】:

不幸的是,这对我不起作用!标准背景可以正常工作,但点击不会改变任何东西!【参考方案2】:

您还没有定义动画,请定义动画并与此视图关联。

        Animation a = new AlphaAnimation(1.00f, 0.00f);
        a.setDuration(1000);
        YOURTEXTVIEW.startAnimation(a);

【讨论】:

这是什么意思?你能给我一个教程或文档的链接吗?抱歉,我刚开始为 Android 开发,但找不到。 我已添加说明...如果有帮助,请接受答案

以上是关于ListView 中的可选 TextView(缺少动画)的主要内容,如果未能解决你的问题,请参考以下文章

匹配正则表达式中的可选斜杠

使用正则表达式匹配日志文件行时的可选字段

检测ListView中的TextView是不是为椭圆

ListView 中一个 TextView 中的两个数组

动态更改 ListView 中的 TextView 字体颜色

遍历 ListView 中的所有 TextView