最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

效果圖:

主要代碼如下

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

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;

  //控件是否有焦點
  private boolean hasFoucs;

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

  public ClearEditText(Context context, AttributeSet attrs) {
    // 這里構(gòu)造方法也很重要,不加這個很多屬性不能再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,假如沒有設(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在手機上的寬度,所以不同分辨率下獲取到的值是不同的,關(guān)鍵所在處
      mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());

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

    /**
     * 因為我們不能直接給EditText設(shè)置點擊事件,所以我們用記住我們按下的位置來模擬點擊事件
     * 當(dāng)我們按下的位置 在 EditText的寬度 - 圖標(biāo)到控件右邊的間距 - 圖標(biāo)的寬度 和
     * EditText的寬度 - 圖標(biāo)到控件右邊的間距之間我們就算點擊了圖標(biāo),豎直方向就沒有考慮
     */
    @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焦點發(fā)生變化的時候,判斷里面字符串長度設(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ā)生變化的時候回調(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è)置晃動動畫
     */
    public void setShakeAnimation(){
      this.setAnimation(shakeAnimation(5));
    }

    /**
     * 晃動動畫
     * @param counts 1秒鐘晃動多少下
     * @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 主要是彈出一句話表示按鈕的點擊事件

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>

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

  • Android利用Flutter實現(xiàn)立體旋轉(zhuǎn)效果

    Android利用Flutter實現(xiàn)立體旋轉(zhuǎn)效果

    本文主要介紹了Flutter繪圖如何使用ImageShader填充圖形,并且利用 Matrix4的三維變換加上動畫實現(xiàn)了立體旋轉(zhuǎn)的動畫效果,感興趣的可以嘗試一下
    2022-06-06
  • Android實現(xiàn)Bitmap位圖旋轉(zhuǎn)效果

    Android實現(xiàn)Bitmap位圖旋轉(zhuǎn)效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)Bitmap位圖旋轉(zhuǎn)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android中程序的停止?fàn)顟B(tài)詳細介紹

    Android中程序的停止?fàn)顟B(tài)詳細介紹

    這篇文章主要介紹了Android中程序的停止?fàn)顟B(tài)詳細介紹,本文講解了什么是程序的停止?fàn)顟B(tài)、為什么Android要引入這一狀態(tài)、激活狀態(tài)和停止?fàn)顟B(tài)的切換、如何變?yōu)橥V範(fàn)顟B(tài)等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • android?viewflipper實現(xiàn)左右滑動切換顯示圖片

    android?viewflipper實現(xiàn)左右滑動切換顯示圖片

    這篇文章主要為大家詳細介紹了android?viewflipper實現(xiàn)左右滑動切換顯示圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android實現(xiàn)自定義圓形進度條

    Android實現(xiàn)自定義圓形進度條

    這篇文章主要介紹了Android自定義圓形進度條實現(xiàn)代碼,進度條在Android中教程經(jīng)常使用到,本文向大家分享了Android實現(xiàn)自定義圓形進度條的代碼,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android控件之SeekBar的用法總結(jié)

    Android控件之SeekBar的用法總結(jié)

    SeekBar是進度條。本篇文章介紹了Android控件之SeekBar的使用,SeekBar的應(yīng)用非常廣,比如用來顯示音量條、播放進度條,有水平顯示也有垂直顯示,有興趣的可以了解一下。
    2017-01-01
  • Android自定義View 仿QQ側(cè)滑菜單的實現(xiàn)代碼

    Android自定義View 仿QQ側(cè)滑菜單的實現(xiàn)代碼

    這篇文章主要介紹了Android自定義View 仿QQ側(cè)滑菜單的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-08-08
  • Android ListView 實例講解清晰易懂

    Android ListView 實例講解清晰易懂

    這篇文章主要通過實例介紹了Android ListView,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 詳解Android中Room組件的使用

    詳解Android中Room組件的使用

    Room 是在 SQLite 上提供了一個抽象層,以便在充分利用 SQLite 的強大功能的同時,能夠流暢地訪問數(shù)據(jù)庫,這篇文章主要為大家介紹了Room組件的具體使用,需要的可以參考下
    2023-08-08
  • 最新評論

    同心县| 卢湾区| 英吉沙县| 寻甸| 珠海市| 资阳市| 桓仁| 托里县| 金平| 叶城县| 衢州市| 辰溪县| 康定县| 天门市| 井陉县| 临海市| 新巴尔虎左旗| 盐边县| 格尔木市| 湄潭县| 保山市| 东乡族自治县| 通海县| 黄平县| 营口市| 鄂伦春自治旗| 遂宁市| 无棣县| 三亚市| 宜兰市| 延川县| 苏州市| 康马县| 长武县| 太和县| 高邮市| 康乐县| 贵港市| 普安县| 罗山县| 伊宁县|