android 关于onTouch跟动画的结合

问题描述

android 关于onTouch跟动画的结合

我想让控件在屏幕上滑动,当手指放开屏幕的时候控件回到他原本的位置,我应该要怎么改,求大神指导!

解决方案

你可以先记录原来的位置 再在Action_UP时 用动画移动到 原来的位置

解决方案二:

1.其实你需要改变控件的位置,
见demo
http://download.csdn.net/detail/q610098308/9511644

解决方案三:

 public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private int tvLeft, tvRight, tvTop, tvBottom;
    private boolean first = true;
    private int startX,startY;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.test);

        textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        startX = (int) event.getRawX();
                        startY = (int) event.getRawY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        textView.layout(
                                (int) (tvLeft + event.getRawX() - startX),
                                (int) (tvTop + event.getRawY() - startY),
                                (int) (tvRight + event.getRawX() - startX),
                                (int) (tvBottom + event.getRawY() - startY));
                        break;
                    case MotionEvent.ACTION_UP:
//                        TranslateAnimation translateAnimation = new TranslateAnimation(tvLeft, tvTop, tvRight, tvBottom);
//                        translateAnimation.setDuration(1000);
//                        textView.setAnimation(translateAnimation);
                        textView.layout(tvLeft, tvTop, tvRight, tvBottom);
                        break;
                }
                return true;
            }
        });

    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus && first) {
            tvLeft = textView.getLeft();
            tvTop = textView.getTop();
            tvRight = textView.getRight();
            tvBottom = textView.getBottom();
            first = false;
            textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
        }
    }
}

解决方案四:

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private int tvLeft, tvRight, tvTop, tvBottom;
    private boolean first = true;
    private int startX, startY;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.test);

        textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        startX = (int) event.getRawX();
                        startY = (int) event.getRawY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        textView.layout(
                                (int) (tvLeft + event.getRawX() - startX),
                                (int) (tvTop + event.getRawY() - startY),
                                (int) (tvRight + event.getRawX() - startX),
                                (int) (tvBottom + event.getRawY() - startY));
                        break;
                    case MotionEvent.ACTION_UP:
                        AnimatorSet set = new AnimatorSet();
                        set.playTogether(
                                ObjectAnimator.ofFloat(textView, "translationX", tvLeft - textView.getLeft()),
                                ObjectAnimator.ofFloat(textView, "translationY", tvTop - textView.getTop())
                        );
                        set.setDuration(2000).start();
                        break;
                }
                return true;
            }
        });

    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus && first) {
            tvLeft = textView.getLeft();
            tvTop = textView.getTop();
            tvRight = textView.getRight();
            tvBottom = textView.getBottom();
            first = false;
            textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
        }
    }
}

解决方案五:

加在 textView = (TextView) findViewById(R.id.test); 下面

        if (first){
            textView.post(new Runnable() {
                @Override
                public void run() {
                    tvLeft = textView.getLeft();
                    tvTop = textView.getTop();
                    tvRight = textView.getRight();
                    tvBottom = textView.getBottom();
                    first = false;
                    textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
                }
            });
        }

解决方案六:

这样基本实现了 你再优化下吧

 public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private int tvLeft, tvRight, tvTop, tvBottom;
    private int Left, Right, Top, Bottom;
    private boolean first = true;
    private int startX, startY;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.test);

        if (first){
            textView.post(new Runnable() {
                @Override
                public void run() {
                    tvLeft = textView.getLeft();
                    tvTop = textView.getTop();
                    tvRight = textView.getRight();
                    tvBottom = textView.getBottom();
                    first = false;
                    textView.setText(tvLeft + "," + tvTop + "," + tvRight + "," + tvBottom);
                }
            });
        }

        textView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        startX = (int) event.getRawX();
                        startY = (int) event.getRawY();
                        Left = textView.getLeft();
                        Top = textView.getTop();
                        Right = textView.getRight();
                        Bottom = textView.getBottom();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        textView.layout(
                                (int) (Left + event.getRawX() - startX),
                                (int) (Top + event.getRawY() - startY),
                                (int) (Right + event.getRawX() - startX),
                                (int) (Bottom + event.getRawY() - startY));
                        break;
                    case MotionEvent.ACTION_UP:
                        AnimatorSet set = new AnimatorSet();
                        set.playTogether(
                                ObjectAnimator.ofFloat(textView, "translationX", tvLeft - textView.getLeft()),
                                ObjectAnimator.ofFloat(textView, "translationY", tvTop - textView.getTop())
                        );
                        set.setDuration(2000).start();

                        textView.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                textView.layout(textView.getLeft(), textView.getTop(), textView.getRight(), textView.getBottom());
                            }
                        }, 2000);

                        break;
                }
                return true;
            }
        });

    }
}
时间: 2024-09-17 04:28:13

android 关于onTouch跟动画的结合的相关文章

android实现字体闪烁动画的方法

  本文实例讲述了android实现字体闪烁动画的方法.分享给大家供大家参考.具体如下: 这里基于线程和Timer实现Android的字体闪烁动画效果. ? public class ActivityMain extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); spark();

Android 使用XML做动画UI的深入解析

在Android应用程序,使用动画效果,能带给用户更好的感觉.做动画可以通过XML或Android代码.本教程中,介绍使用XML来做动画.在这里,介绍基本的动画,如淡入,淡出,旋转等,需要的朋友可以参考下   效果: http://www.56.com/u82/v_OTM4MDk5MTk.html 第一步: 创建anim文件夹放置动画xml文件在res文件夹下,创建一个anim的子文件夹.           第二步: 加载动画接着在Activity创建一个Animation类,然后使用Anim

tablet-在 android 平板上的动画显示错误

问题描述 在 android 平板上的动画显示错误 我开发一个android程序,开始于启动画面.程序在模拟器和真机上可以运行,但是平板上不行. package com.example.project; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Window; import an

Android开发之Animations动画用法实例详解_Android

本文实例讲述了Android开发之Animations动画用法.分享给大家供大家参考,具体如下: 一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 Java Code代码中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸

android fragment后退没动画

问题描述 android fragment后退没动画 我用的是getFragmentManager().popBackStack();后退,跳转这里使用add来跳转的, add的时候transaction.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out, R.anim.push_left_in, R.anim.push_left_out);可是我后退的时候却什么效果都没有,求解,网上 找了好久都不行.... 解决方案 这

效果-android如何实现模糊动画

问题描述 android如何实现模糊动画 ** 我现在要做一个动画效果,就是一个textview慢慢从模糊到清晰,我在网上搜的资料都是讲图片变模糊的,不知道有没有大神做过类似的,能不能帮忙说一下思路,谢谢了!** 我现在的思路是拿到textview的bitmap使它模糊,不过好像没什么效果啊,哪位大神帮我看一下啊! 我的代码 private void getBitmapFromView(){ thansun.getViewTreeObserver().addOnPreDrawListener(n

Android实现一种动画效果,从左到右慢慢的显示一张完整的图片

问题描述 Android实现一种动画效果,从左到右慢慢的显示一张完整的图片,我试过了Animation,没有做出来.有没有哪位大神帮忙解决下,万分感激 解决方案 解决方案二:改变坐标就行啊坐第一个沙发,接分咯解决方案三:怎么改变坐标,我不会,你能给个demo吗?解决方案四:例子在哪啊要看实际的东西解决方案五:可以试下ClipDrawable解决方案六:publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(Bun

android 关于用属性动画平移layout后其中button不能响应的问题

问题描述 android 关于用属性动画平移layout后其中button不能响应的问题 如题,为什么在layout中的button不能响应了? ObjectAnimator animator=ObjectAnimator.ofFloat(hiddenLayout,"translationY",0); animator.setDuration(100); animator.start(); Log输出属性动画执行前后layout的getY()未改变,这是为什么? 解决方案 原来是处理G

设计一个android引导页面的动画,最好是透明渐变动画效果,求大神帮忙!

问题描述 设计一个android引导页面的动画,最好是透明渐变动画效果,求大神帮忙! 设计一个android引导页面的动画,最好是透明渐变动画效果,大概样式就像APP微信精选那个引导页面那种样式,求大神帮忙给个Demo! 解决方案 之前回复的都回复不了,现在重新再给你回复一遍吧,首先创建三个Fragment,我现在给你举一个例子: public class WelcomeFragment1 extends Fragment { @Override public void onCreate(Bun