有一个带有膨胀行的 ListView 。在每一行,都有一个名为 btn_to_show_actual 的按钮,用于从屏幕右侧外部向屏幕(在其父行的相同 Y 位置)。
X_in_screen = Constants.SCREEN_W * 1/2 ;
X_out_screen = Constants.SCREEN_W
Y_in_screen = Constants.SCREEN_H /2;
以上内容均经过正确的数字检查。
代码如下:
<ImageButton
android:id="@+id/btn_to_show_actual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@null"
android:src="@drawable/btn_to_show_actual_selector"
android:scaleType="fitXY"/>
<RelativeLayout
android:id="@+id/ll_hide_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/btn_to_show_actual"
android:layout_alignBottom="@+id/btn_to_show_actual"
android:layout_toLeftOf="@+id/btn_to_show_actual"
android:orientation="horizontal">
<ImageButton
android:id="@+id/btn_to_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/btn_delete"
android:background="@null"
android:src="@drawable/btn_left_selector"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/btn_to_hide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/btn_delete"
android:background="@null"
android:src="@drawable/btn_right_selector"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/btn_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/btn_amend"
android:background="@null"
android:src="@drawable/btn_delete_selector"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/btn_amend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/btn_share"
android:background="@null"
android:src="@drawable/btn_input_selector"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/btn_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@null"
android:src="@drawable/btn_share2_selector"
android:scaleType="fitXY"/>
</RelativeLayout>
btn_to_show_actual.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
Utilities.system_toast(Show_database.this, "btn to show actual pressed" + "\n" + "X-screen=" + Constants.SCREEN_W + "; X-in=" + X_in_screen + "; X-out= " + X_out_screen + "; Y=" + Y_in_screen);
//btn_to_show_actual.setVisibility(View.INVISIBLE);
btn_to_show.setVisibility(View.VISIBLE);
translate_to_left = new TranslateAnimation(Animation.ABSOLUTE, X_out_screen, // from X0
Animation.ABSOLUTE, X_in_screen, // to X1
Animation.ABSOLUTE, Y_in_screen, // from Y0
Animation.ABSOLUTE, Y_in_screen); // to Y1
translate_to_left.setInterpolator(new DecelerateInterpolator());
translate_to_left.setDuration(800);
translate_to_left.setFillAfter(true);
translate_to_left.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation a) {
}
public void onAnimationRepeat(Animation a) {}
public void onAnimationEnd(Animation a)
{
btn_to_hide.setVisibility(View.VISIBLE);
btn_to_show.setVisibility(View.INVISIBLE);
}
});
ll_hide_btn.startAnimation(translate_to_left);
}
});
btn_to_hide.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Utilities.system_toast(Show_database.this, "btn to hide pressed");
translate_to_right = new TranslateAnimation(Animation.ABSOLUTE, X_in_screen, // from X0
Animation.ABSOLUTE, X_out_screen, // to X1
Animation.ABSOLUTE, Y_in_screen, // from Y0
Animation.ABSOLUTE, Y_in_screen); // to Y1
translate_to_right.setInterpolator(new DecelerateInterpolator());
translate_to_right.setDuration(800);
translate_to_right.setFillAfter(true);
translate_to_right.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation a) {
}
public void onAnimationRepeat(Animation a) {}
public void onAnimationEnd(Animation a)
{
btn_to_hide.setVisibility(View.INVISIBLE);
btn_to_show.setVisibility(View.VISIBLE);
btn_to_show_actual.setVisibility(View.VISIBLE);
}
});
ll_hide_btn.startAnimation(translate_to_right);
}
});
按下 btn_to_show_actual 后,ll_hide_btn 无法从屏幕外转换为屏幕。我怎样才能使 ll_hide_btn 显示/消失并正确翻译?
最佳答案
我建议使用 Animator 而不是 Animation,因为它只会改变对象的视觉表示。因此,您可能会遇到使用动画的按钮触摸坐标问题
另一方面,动画师会改变对象的物理属性。因此,如果将 View 移动到新位置,触摸坐标将映射到新位置。
要获得您想要的行为,您不需要平移 Y 轴,只需平移 X 轴。可以在X_out_screen 位置设置ll_hide_btn 的初始TranslationX 来设置ll_hide_btn offscreen,然后动画为0 如果你想将按钮平移到屏幕上
你的实现可能是这样的:
在 X_out_screen 位置设置 ll_hide_btn translationX:
ll_hide_btn.setTranslationX(X_out_screen)
点击监听器:
btn_to_show_actual.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_to_show.setVisibility(View.VISIBLE);
ll_hide_btn.animate()
.translationX(0f)
.setDuration(800)
.setInterpolator(new DecelerateInterpolator())
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
btn_to_hide.setVisibility(View.VISIBLE);
btn_to_show.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
});
btn_to_hide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ll_hide_btn.animate()
.translationX(X_out_screen.toFloat())
.setDuration(800)
.setInterpolator(new DecelerateInterpolator())
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
btn_to_hide.setVisibility(View.INVISIBLE);
btn_to_show.setVisibility(View.VISIBLE);
btn_to_show_actual.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
});
关于android - ListView 中膨胀行中某些布局的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54505302/
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
我想创建一个模块,为从事件记录库继承的类提供一些通用方法。以下是我们可以实现的两种方式。1)moduleCommentabledefself.extended(base)base.class_evaldoincludeInstanceMethodsextendClassMethodsendendmoduleClassMethodsdeftest_commentable_classmethodputs'testclassmethod'endendmoduleInstanceMethodsdeftest_commentable_instance_methodputs'testinstanc
我在ruby/rails中导入此CSV文件时遇到问题我得到的错误信息是这样的:Missingorstrayquoteinline1(CSV::MalformedCSVError)但我不确定发生了什么,因为我的CSV看起来非常好。以下是示例数据:"lesley_grades","lesley_id","last","first","active","site","cohort","section","sections_title","faculty","completed_term_cred","term","sec_start_date","sec_end_date","grade
动画/*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
有没有办法在ruby中生成介于1-100但不包括20、30和40之间的随机数?我可以做类似的事情defrandom_numberrandom_number=rand(100)whilerandom_number==20||30||40random_number=rand(100)endreturnrandom_numberend...但这似乎不是很有效(再加上那个特定的例子可能根本行不通)。有没有更简单的方法?任何帮助深表感谢! 最佳答案 创建一个1到100的数组。从该数组中删除不需要的元素。然后从数组中选择一个随机数。([*1
我正在使用rails_xss运行Rails2.3.14插入。我有另一个用于创建管理仪表板View的插件。我的问题是rails_xss正在转义我的仪表板插件生成的所有HTML。有没有一种方法可以将rails_xss配置为不转义匹配example.com/admin或基于目录(app/views/admin)或任何类似的页面结果一样吗? 最佳答案 更新仪表板生成插件以使用raw或html_safe进行内容输出可能会更简单。 关于ruby-on-rails-仅在某些页面上使用rails_xss