您的位置:首页 > 其它

文本特效(输入框)demo

2016-03-15 15:20 288 查看
文本特效(输入框)Demo

BiuEditText.java


package jamesxu.biuedittext;

import android.animation.Animator;

import android.animation.AnimatorListenerAdapter;

import android.animation.AnimatorSet;

import android.animation.ObjectAnimator;

import android.app.Activity;

import android.content.Context;

import android.text.Editable;

import android.text.Layout;

import android.text.TextWatcher;

import android.util.AttributeSet;

import android.view.Gravity;

import android.view.ViewGroup;

import android.view.WindowManager;

import android.view.animation.DecelerateInterpolator;

import android.widget.EditText;

import android.widget.TextView;

import java.util.Random;

/**

 * Created by james on 22/11/15.

 */

public class BiuEditText extends EditText {

    private ViewGroup contentContainer;

    private int height;

    private String cacheStr = "";

    public BiuEditText(Context context, AttributeSet attrs) {

        super(context, attrs);

        init();

        setlistener();

    }

    private void setlistener() {

        addTextChangedListener(new TextWatcher() {

            @Override

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override

            public void onTextChanged(CharSequence s, int start, int before, int count) {

                int cachelength = cacheStr.length();

                if (cachelength < s.length()) {

                    String last = s.subSequence(cachelength, s.length()).toString();

                    update(last, true);

                } else {

                    update(String.valueOf(cacheStr.charAt(cachelength - 1)), false);//删除文字时

                }

                cacheStr = s.toString();

            }

            @Override

            public void afterTextChanged(Editable s) {

            }

        });

    }

    private void update(String last, boolean isUp) {

        final TextView textView = new TextView(getContext());

        textView.setTextColor(getResources().getColor(android.R.color.white));

        textView.setTextSize(30);

        textView.setText(last);

        textView.setGravity(Gravity.LEFT);

        contentContainer.addView(textView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        textView.measure(0, 0);

        int pos = getSelectionStart();

        Layout layout = getLayout();

        int line = layout.getLineForOffset(pos);

        int baseline = layout.getLineBaseline(line);

        int ascent = layout.getLineAscent(line);

        float startX = 0;

        float startY = 0;

        float endX = 0;

        float endY = 0;

        if (isUp) {

            startX = layout.getPrimaryHorizontal(pos) + 100;

            startY = height / 3 * 2;

            endX = startX;

            endY = baseline + ascent;

        } else {

            endX = new Random().nextInt(contentContainer.getWidth());

            endY = height / 3 * 2;

            startX = layout.getPrimaryHorizontal(pos) + 70;

            startY = baseline + ascent;

        }

        final AnimatorSet animSet = new AnimatorSet();

        ObjectAnimator animX = ObjectAnimator.ofFloat(textView, "translationX", startX, endX);

        ObjectAnimator animY = ObjectAnimator.ofFloat(textView, "translationY", startY, endY);

        ObjectAnimator scaleX = ObjectAnimator.ofFloat(textView, "scaleX", 0.6f, 1.2f);

        ObjectAnimator scaleY = ObjectAnimator.ofFloat(textView, "scaleY", 0.6f, 1.2f);

        animY.setInterpolator(new DecelerateInterpolator());

        animSet.setDuration(600);

        animSet.addListener(new AnimatorListenerAdapter() {

            @Override

            public void onAnimationStart(Animator animation) {

            }

            @Override

            public void onAnimationEnd(Animator animation) {

                contentContainer.removeView(textView);

            }

        });

        animSet.playTogether(animX, animY, scaleX, scaleY);

        animSet.start();

    }

    private void init() {

         contentContainer = (ViewGroup) ((Activity) getContext()).findViewById(android.R.id.content);

        WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);

        height = windowManager.getDefaultDisplay().getHeight();

    }

}

MianActivity.java

package jamesxu.biuedittext;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    public static final String TAG = "main";

    private BiuEditText editText;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        editText = (BiuEditText) findViewById(R.id.biucontainer);

    }

}

res\menu\menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">

    <item android:id="@+id/action_settings" android:title="@string/action_settings"

        android:orderInCategory="100" app:showAsAction="never" />

</menu>

布局activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="@android:color/darker_gray"

    android:orientation="vertical"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity">

    <jamesxu.biuedittext.BiuEditText

        android:id="@+id/biucontainer"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_alignParentBottom="true"

        android:hint="输入文字查看效果"

        android:textColor="@android:color/white" />

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息