亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android登陸界面實(shí)現(xiàn)清除輸入框內(nèi)容和震動(dòng)效果

 更新時(shí)間:2015年12月13日 15:23:04   作者:徐劉根  
這篇文章主要介紹了Android登陸界面實(shí)現(xiàn)清除輸入框內(nèi)容和震動(dòng)效果,感興趣的小伙伴們可以參考一下

本文為大家分享Android登陸界面實(shí)現(xiàn)清除輸入框內(nèi)容和震動(dòng)效果的全部代碼,具體內(nèi)容如下:

效果圖:

主要代碼如下

自定義的一個(gè)EditText,用于實(shí)現(xiàn)有文字的時(shí)候顯示可以清楚的按鈕:

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.CycleInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.EditText;

public class ClearEditText extends EditText implements View.OnFocusChangeListener,TextWatcher{

   //刪除按鈕的引用
  private Drawable mClearDrawable;

  //控件是否有焦點(diǎn)
  private boolean hasFoucs;

  public ClearEditText(Context context) {
    this(context, null);
  }

  public ClearEditText(Context context, AttributeSet attrs) {
    // 這里構(gòu)造方法也很重要,不加這個(gè)很多屬性不能再XML里面定義
    this(context, attrs, android.R.attr.editTextStyle);
  }

  public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
  }

   private void init() {
      //獲取EditText的DrawableRight,假如沒(méi)有設(shè)置我們就使用默認(rèn)的圖片
      mClearDrawable = getCompoundDrawables()[2];
      if (mClearDrawable == null) {
        // throw new NullPointerException("You can add drawableRight attribute in XML");
        mClearDrawable = getResources().getDrawable(R.drawable.selector_ic_delete);
      }

      //getIntrinsicWidth()取得的是Drawable在手機(jī)上的寬度,所以不同分辨率下獲取到的值是不同的,關(guān)鍵所在處
      mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());

      //默認(rèn)設(shè)置隱藏圖標(biāo)
      setClearIconVisible(false);
      //設(shè)置焦點(diǎn)改變的監(jiān)聽
      setOnFocusChangeListener(this);
      //設(shè)置輸入框里面內(nèi)容發(fā)生改變的監(jiān)聽
      addTextChangedListener(this);
    }

    /**
     * 因?yàn)槲覀儾荒苤苯咏oEditText設(shè)置點(diǎn)擊事件,所以我們用記住我們按下的位置來(lái)模擬點(diǎn)擊事件
     * 當(dāng)我們按下的位置 在 EditText的寬度 - 圖標(biāo)到控件右邊的間距 - 圖標(biāo)的寬度 和
     * EditText的寬度 - 圖標(biāo)到控件右邊的間距之間我們就算點(diǎn)擊了圖標(biāo),豎直方向就沒(méi)有考慮
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
      if (event.getAction() == MotionEvent.ACTION_UP) {
        if (getCompoundDrawables()[2] != null) {

          boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())
              && (event.getX() < ((getWidth() - getPaddingRight())));

          if (touchable) {
            this.setText("");
          }
        }
      }

      return super.onTouchEvent(event);
    }

    /**
     * 當(dāng)ClearEditText焦點(diǎn)發(fā)生變化的時(shí)候,判斷里面字符串長(zhǎng)度設(shè)置清除圖標(biāo)的顯示與隱藏
     */
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
      this.hasFoucs = hasFocus;
      if (hasFocus) {
        setClearIconVisible(getText().length() > 0);
      } else {
        setClearIconVisible(false);
      }
    }


    /**
     * 設(shè)置清除圖標(biāo)的顯示與隱藏,調(diào)用setCompoundDrawables為EditText繪制上去
     * @param visible
     */
    protected void setClearIconVisible(boolean visible) {
      Drawable right = visible ? mClearDrawable : null;
      setCompoundDrawables(getCompoundDrawables()[0],
          getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
    }


    /**
     * 當(dāng)輸入框里面內(nèi)容發(fā)生變化的時(shí)候回調(diào)的方法
     */
    @Override
    public void onTextChanged(CharSequence s, int start, int count,int after) {
      if(hasFoucs){
        setClearIconVisible(s.length() > 0);
      }
    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {

    }


    /**
     * 設(shè)置晃動(dòng)動(dòng)畫
     */
    public void setShakeAnimation(){
      this.setAnimation(shakeAnimation(5));
    }

    /**
     * 晃動(dòng)動(dòng)畫
     * @param counts 1秒鐘晃動(dòng)多少下
     * @return
     */
    public static Animation shakeAnimation(int counts){
      Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0);
      translateAnimation.setInterpolator(new CycleInterpolator(counts));
      translateAnimation.setDuration(1000);
      return translateAnimation;
    }
}

MainActivity.java 主要是彈出一句話表示按鈕的點(diǎn)擊事件

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.app.Activity;

public class MainActivity extends Activity {

  private Button btnLogin;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    btnLogin = (Button) this.findViewById(R.id.btnLogin);
  }

  public void login(View view) {
    Toast.makeText(this, "登陸", Toast.LENGTH_LONG).show();

  }
}

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#ffffffff"
  android:orientation="vertical"
  android:padding="4.0dip" >

  <com.xuliugen.clearedittext.ClearEditText
    android:id="@+id/etxtEmail"
    style="@style/editText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="30.0dip"
    android:drawableLeft="@drawable/icon_reg_name"
    android:drawablePadding="10.0dip"
    android:hint="使用郵箱登陸" />

  <com.xuliugen.clearedittext.ClearEditText
    android:id="@+id/etxtPwd"
    style="@style/editText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20.0dip"
    android:drawableLeft="@drawable/icon_reg_password"
    android:drawablePadding="10.0dip"
    android:hint="輸入登陸密碼"
    android:inputType="textPassword" />

  <Button
    android:id="@+id/btnLogin"
    style="@style/bigGreenButton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20.0dip"
    android:onClick="login"
    android:text="登陸" />

</LinearLayout>

另外還有一些selector文件,圖片資源等:
bg_btn_style_green.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:state_enabled="false"><shape android:shape="rectangle">
      <corners android:radius="2.0dip" />

      <solid android:color="@color/green_btn_color_disable" />
    </shape></item>
  <item android:state_pressed="true"><shape android:shape="rectangle">
      <corners android:radius="2.0dip" />

      <solid android:color="@color/green_btn_color_pressed" />
    </shape></item>
  <item><shape android:shape="rectangle">
      <corners android:radius="2.0dip" />

      <solid android:color="@color/green_btn_color_normal" />
    </shape></item>

</selector>

bg_edittext_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:drawable="@drawable/input_bar_bg_active" android:state_focused="true"/>
  <item android:drawable="@drawable/input_bar_bg_normal"/>

</selector>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。

相關(guān)文章

最新評(píng)論