jjzjj

android - 给 ClassCastException 的 ListView 的动画标题

coder 2023-12-05 原文

我有一个 ListView ,用于存储一个人的通信历史记录。我在 ListView 中有一个标题,它充当带有编辑文本和发送按钮的消息编辑器。 当用户键入内容并按下发送按钮时,消息会添加到通信列表中,编辑器会变空。

我想要的是当用户按下发送按钮时,编辑器应该变得不可见并且 Item 应该添加到 ListView 中。之后,编辑器应该从顶部逐渐出现,给人一种正在移动下面项目的感觉。

我已经在页眉上实现了一个翻译动画,但它所做的是通过向下插入项目为其腾出空间,然后逐渐填充我不想要的空间。

我使用了 this question 中解释的负边距技巧但它对我不起作用。因为我们不能为标题使用 AbsListView.LayoutParam 以外的布局参数。我尝试设置其他参数,但在设置动画时它给了我 ClassCastException。我跟踪了异常,这是由于在 ListView 中编写的代码,他们试图在 clearRecycledState() 方法中使用 AbsListView.LayoutParams 转换这些参数。

或者有没有一种方法可以在 ListView 标题上应用支持边距的布局参数。

代码

public class PageListView extends ListView {
    private Application app;
    private CommListAdapter listAdapter;
    private MessageEditorHeader messageEditorHeader;
    private MessageItemLongClick mInterface;
    private Handler handler;

public ProfilePageListView(Application app, MessageItemLongClick mInterface) {
    super(app);
    this.app = app;
    this.mInterface = mInterface;
    this.handler = new Handler();
    setupView();
}

public void applyData(ProfileData data){

    listAdapter.applyData(data.getUser());
    // some other business logic        
}

private void setupView() {

    messageEditorHeader = new MessageEditorHeader(app);
    addHeaderView(messageEditorHeader);

    listAdapter = new CommListAdapter(app, mInterface);
    setAdapter(listAdapter);
    setDivider(null);
    setScrollingCacheEnabled(false);

    tAnimation = new TranslateAnimation(0.0f, 0.0f, -90.0f, 0.0f);
    tAnimation.setZAdjustment(-1);
    tAnimation.setDuration(1500);
}

// this gets called whenever the communication gets added to the listview.
public void onNewCommunication(Communication lc) {
    listAdapter.onNewCommunication();

    if(lc != null && lc.isOutgoing() && !lc.getType().isCall()){            
        getMessageEditor().startNewMessage();
        messageEditorHeader.setVisibility(VISIBLE); // this is overriden method here I m toggling the height 1px and WRAP_CONTENT
        messageEditorHeader.startAnimation(tAnimation);
    }
}   

// few more methods are there.
}

这是消息编辑器的代码

public class MessageEditorHeader extends RelativeLayout {
private MessageEditor msgEditor;

public MessageEditorHeader(AppteraApplication context) {
    super(context);
    msgEditor = new MessageEditor(context); // Its a relative layout containing edit text and the send button
    addView(msgEditor);
}

public MessageEditor getMsgEditor() {
    return msgEditor;
}

public void setProgress(int progress){
    msgEditor.setProgress(progress);
}

 @Override
public void setVisibility(int visibility) {
    this.visibility = visibility;
    if (visibility == View.VISIBLE) {
        ListView.LayoutParams params = new ListView.LayoutParams(ListView.LayoutParams.FILL_PARENT, ListView.LayoutParams.WRAP_CONTENT);
        setLayoutParams(params);
    }
    else {
        ListView.LayoutParams params = new ListView.LayoutParams(ListView.LayoutParams.FILL_PARENT, 1);
        setLayoutParams(params);
    }
}
}

最佳答案

您是否考虑过其他方法?也许你可以把编辑器 View 放在列表的顶部,但在屏幕之外,然后使用 smoothScrollToPosition过渡。所以实际上你只是滚动列表,但效果可能是你正在寻找的。

关于android - 给 ClassCastException 的 ListView 的动画标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8338980/

有关android - 给 ClassCastException 的 ListView 的动画标题的更多相关文章

  1. ruby-on-rails - 使用 Rmagick 或 ImageMagick 在背景上放置标题 - 2

    我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植

  2. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  3. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  4. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  5. LVGL V8动画 - 2

    动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim

  6. ruby - Carrierwave + MiniMagick - 如何将动画 GIF 压缩到第一帧? - 2

    有人知道如何使用Carrierwave+MiniMagick将动画GIF压缩到第一帧吗? 最佳答案 我认为MiniMagick有一些变化,因为我只花了三个小时试图找出为什么Andrey的代码对我不起作用。我收到以下错误:ActiveRecord::RecordInvalid(Validationfailed:ImageFailedtomanipulatewithMiniMagick,maybeitisnotanimage?OriginalError:Command("mogrify-scene/var/folders/0o/0oqN

  7. ruby - 如何在 selenium-webdriver 中获取窗口标题、ID 和名称? - 2

    我正在尝试从selenium-webdriver(ruby)实现以下方法get_all_window_idsget_all_window_titlesget_all_window_names我运行了SeleniumIDE并将我的脚本导出到RubyTest::Unit。另存为.rb使用AptanaStudio3打开我的脚本进行编辑初始代码片段如下:require"rubygems"require"selenium-webdriver"require"test/unit"classSwitchToPopup3我不断得到的错误是NoMethodError:undefinedmethod`ge

  8. 微信小程序顶部标题栏与胶囊对齐 - 2

    介绍    最近在做微信小程序时,顶部标题栏总是与胶囊对不齐。往往是在这款手机上对齐了,在另外一款手机差很多。我在查阅资料后,提出了一种方法解决这个问题,即:在页面onLoad或组件created时,利用微信小程序提供的API,获取系统状态栏高度和胶囊信息,进而动态调整顶部标题栏样式。在苹果、小米、荣耀手机做验证,能做到精准对齐。理论        胶囊样式应该是垂直居中,有1px的border,border-radius为18px。        若要使顶部标题栏与胶囊对齐,则其高度必须是导航栏高度,标题栏内容也要垂直居中,顶部标题栏的外边距或内边距必须是状态栏高度。        如果顶部

  9. ruby-on-rails - wicked_pdf 不呈现标题 - 2

    render:pdf=>"file_name",:layout=>'pdf.html.erb',:template=>'transactions/show.pdf.erb',:wkhtmltopdf=>WICKED_PDF_BIN,:show_as_html=>true,:layout=>'pdf.html.erb',:header=>{:html=>{:template=>'shared/header.pdf.erb'}}PDF生成正常,不幸的是我没有看到标题。我可以将页眉粘贴在主布局中,它也可以正常工作。在我看来,上面的标题行没有被处理。文件名“header.pdf.erb”似乎无

  10. ruby-on-rails - 为 Ruby/Rails 动态更改 iTerm2 选项卡标题 - 2

    我正在使用iTerm2,通常会打开很多选项卡。不幸的是,所有选项卡都显示相同的标题“ruby”,因为它都是ruby​​脚本。但一个是railsserver,另一个是railsconsole,下一个是“spork”,...我想将选项卡标题动态设置为“server”、“console”或类似的东西,只要进程是运行并在完成后返回默认值(“bash”)。有人知道怎么做吗?谢谢。 最佳答案 此命令会将选项卡的标题设置为MY_NEW_TITLEecho-e"\033];MY_NEW_TITLE\007"

随机推荐