【android自定义控件】属性动画 <五>

正如我们已经看到在以前经常使用的动画,可以通过Xml很容易的创建。

<xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0%p" android:fromYDelta="0%p"
    android:toXDelta="50%p" android:toYDelta="50%p"
    android:duration="1000"
    android:fillAfter="true" />

不幸的是在某些情况下,我们面临麻烦的局限性。怎么避免遇到这些局限性呢

通过一个例子:

我们将创建一个简单的动画来说明这个问题,当button被点击后,移动button从屏幕的左上角到中心,然后再次点击button,

希望button移回原来的位置,但是点击button没有效果,你试试点击原来button所在的左上角位置,button移动回起始位置,

这说明button的可点击区域没有跟着button移动。


正确的做法,我们必须计算,其中左上角的button开始位置(0,0)。获取被点击button大小,还要知道父控件宽度,高度,计算它需要

移动到那个位置(这里设置移动到中心点位置),通过代码动态的改变动画,当它到中心后,再次点击,然动画回到原位:

------------------

public class MyActivity extends Activity implements View.OnClickListener {
    private Button button;
    private RelativeLayout rel_layout;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initView();
    }

    private void initView() {
        button=(Button)findViewById(R.id.btn_hello);
        rel_layout=(RelativeLayout)findViewById(R.id.rel_layout);
        button.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_hello:
		//获取button,及父控件大小
                int btnWidth=button.getWidth();
                int btnHeight=button.getHeight();
                int preantWidth=rel_layout.getWidth();
                int preantHeight=rel_layout.getHeight();

                boolean isInCenter=button.getLeft()>0;
                Toast.makeText(MyActivity.this,"isInCenter:"+isInCenter,Toast.LENGTH_LONG).show();
		//计算移动位置
                final int fromX=isInCenter?(preantWidth-btnWidth)/2:0;
                final int fromY=isInCenter?(preantHeight-btnHeight)/2:0;
                final int toX=isInCenter?0:(preantWidth-btnWidth)/2;
                final int toY=isInCenter?0:(preantHeight-btnHeight)/2;

                TranslateAnimation moveanim=new TranslateAnimation(TranslateAnimation.ABSOLUTE,fromX,
                                        TranslateAnimation.ABSOLUTE,toX,TranslateAnimation.ABSOLUTE,
                                               fromY,TranslateAnimation.ABSOLUTE,toY);
                moveanim.setDuration(1000);
                moveanim.setFillAfter(true);
		//启动不能少
                button.startAnimation(moveanim);
		//设置动画来回运动
                setMoveAnimLinster(moveanim,fromX,fromY,toX,toY);
                break;
            default:
                break;
        }

    }

    private void setMoveAnimLinster(TranslateAnimation moveanim,int fromX,int fromY,final int toX,final  int toY) {
        moveanim.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
               RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                                                                   RelativeLayout.LayoutParams.WRAP_CONTENT);
		//动画开始位置		
                params.leftMargin=0;
                params.topMargin=0;
                button.setLayoutParams(params);
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);
                params.leftMargin=toX;
                params.topMargin=toY;
                button.setLayoutParams(params);
                button.clearAnimation();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Android Studio 是一款常用的 Android 应用开发工具,用于编写 Android 应用程序。要创建自定义控件,您需要在 Android Studio 中使用 Java 或 Kotlin 编程语言编写代码。 以下是创建自定义控件的基本步骤: 1. 创建一个新的 Java 或 Kotlin 类,并将其扩展为 View 类或其子类,以便您可以在其中添加自定义逻辑。 2. 在构造函数中设置自定义属性(如果有的话),以便在 XML 布局中使用它们。 3. 重写 onDraw() 方法以绘制控件的外观。 4. 实现所需的触摸事件或动画,以便控件可以与用户进行交互。 5. 在布局文件中使用自定义控件。 6. 运行应用程序并测试您的自定义控件。 希望这能帮助您入门 Android Studio 中创建自定义控件的过程。 ### 回答2: Android Studio是一款用于Android开发的集成开发环境。在进行应用程序的布局时,我们可以调用系统提供的控件进行嵌入,但是有时候我们需要开发一些自己的控件,以满足特殊的需求。 自定义控件是指开发者可以通过继承系统控件或者View类,在原控件基础上进行修改或新增,以满足自己的需求,并提供相应的功能和界面。自定义控件是应用程序开发中的重要一环,可以提高程序的可读性和复用性,使UI更具有个性和美观。 自定义控件的开发需要经过几个重要的步骤。首先,我们需要根据需求选择合适的父类,一般选择继承View或其子类,以便于对控件的各个属性、方法进行定制化的修改;然后在控件的类中定义各种需要的属性,包括尺寸、颜色、字体等等;接着,我们需要处理控件的样式和外观,例如背景、边框、圆角等;最后,我们需要添加控件的功能,例如事件处理、刷新UI等等。 除了以上简单的步骤,自定义控件的开发还涉及到一些高级的技术,例如自定义属性自定义ViewGroup、画布操作等等。自定义属性可用于方便地配置控件;自定义ViewGroup则可以将多个控件进行整体布局;画布操作则可以实现控件的高级绘制效果。 在Android Studio中,可以通过自带的工具来支持自定义控件的开发。使用该工具,可以快速轻松地创建自定义控件,而无需繁琐的手动代码编写。同时,也可以通过该工具来修改已有的自定义控件,并将其添加到应用程序中。掌握Android Studio自定义控件开发,将有助于开发人员更好地完成各种Android应用程序的开发。 ### 回答3: Android Studio是一种非常流行的Java开发工具,针对在Android设备上运行的应用程序进行定制的自定义UI控件。以下是有关使用Android Studio创建自定义控件的详细解释。 首先,开发人员需要了解Android操作系统的基本视图层次结构。在Android应用程序中,屏幕上的一切都被认为是视图,这些视图可以是简单的单个元素,也可以是更复杂的嵌套组合。每个视图都有一个类,用于定义其外观和行为。 为了创建自定义控件,我们需要创建一个新的视图类,该类将扩展现有的视图类。这可以通过继承现有的Android SDK视图类来实现,比如TextView或Button。 如果需要定制视图的外观,可以在新类中重写父类的某些方法。例如,可以重写onDraw()方法来绘制自定义形状或颜色。 要添加自定义行为,可以通过在类中添加新方法来实现。例如,如果要创建一个绘制流程图的视图,可以创建一个绘制线条和节点的方法。 在创建与视图关联的XML布局文件时,必须手动定义新视图类的属性。可以使用自定义属性声明XML命名空间,并将属性添加到视图类中。这些属性可以在代码中编程访问,并允许开发人员在XML和Java代码中控制视图。 一旦创建了自定义控件类,就可以像使用任何其他视图类一样添加它们到XML布局文件中。 总而言之,在Android Studio中开发自定义控件是一项具有挑战性但有益的任务。理解应用程序的视图层次结构和重写现有控件类的方法可能需要一些时间和实践,但最终的结果是定制外观和行为的完全可控控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值