Android小项目之--动画和下拉框的相互应用

由於android手机屏幕的局域性,有时候使用选择功能的时候用下拉框显示数据是再好不过的选择了,android Tool自身提供了一个下拉框 名字叫:Spinner本例中将会用到比较多的知识点,希望读者能耐心看完,相信看完后将会给你很大帮助,下面将列举一下本例子要用到的几个知识点:

  一:Spinner  (下拉框)数据篇:在这里Spinner相当于asp.net服务器控件(DropDownList),设置数据方法setAdapter() ,此时需要传进来的参数为一个ArrayAdapter<String>类型的数据集,使用方法看后文。

  样式篇:Android 自身提供的样式己经非常好用,但有时我们自有的样式可能满足不了我们,如何定制Spinner的样式呢?Android同时也为我们提供了一个方法setDropDownViewResource() 此方法参数为int型,我们可以在Layout添加一个xml文件,然後在xml文件里面写style指明Spinner的样式,然後通过如下adpater.setDropDownViewResource(R.layout.dropdown);设置下拉框弹出样式,xml详细使用看後文。

  二:Animation  (动画)类型篇:Android的动画(Animation )由四种类型组成:alpha、scale、translate以及rotate;分别为[alpha、scale]--渐变动画 、[translate、rotate]  --画面转换动画。

-----------------------------------------------------alpha---------------------------------------------------
  alpha:透明度控制动画效果

    浮点型值:fromAlpha 属性为动画起始时透明度
             toAlpha  属性为动画结束时透明度
       说明:0.0  表示完全透明 1.0表示完全不透明   以上取值0.0-1.0之间的float数据类型的数字
    长整型值:duration  属性为动画持续时间说明:时间以毫秒为单位

----------------------------------------------------scale----------------------------------------------------
scale:尺寸伸縮效果
      屬性:interpolator  指定一個動畫的插入器
          android自帶有三種動畫插入器: accelerate_decelerate_interpolator 加速、減速動畫插入器
                          accelerate_interpolator        加速 動畫插入器
                           decelerate_interpolator        減速動畫插入器
          浮點型值:fromXScale  屬性為動畫起始時  X坐標上的伸縮尺寸
               toXScale   屬性為動畫結束時 X座標上的伸縮尺寸
               fromYScale  屬性為動畫起始時  Y坐標上的伸縮尺寸
                 toYScale     屬性為動畫結束時 Y座標上的伸縮尺寸
          說明:以上四種屬性值 0.0表示收縮到沒有    1.0表示正常無伸縮    值小于1.0表示伸縮     值大于1.0表示放大
              pivotX     屬性為動畫相對于物件大于X座標的開始位置
              pivotY     屬性為動畫相對于物件大于X座標的開始位置
          說明:以上兩個屬性值從 0%-100%中取值   50%為物件的X或Y方向 坐標上的中點位置
          長整型值:duration 屬性為動畫持續時間  說明:時間以毫秒為單位
          布爾型值:fillAfter  屬性當設置為true,該動畫轉化在動畫結束后被應用
----------------------------------------------------translate --------------------------------------------    translate 位置轉移動畫效果 (本例子將會使用到這個動畫效果,請留意后文詳細使用方法)          整型值:fromXDelta 屬性為動畫超始時 X坐上的位置              toXDelta   屬性為動畫結束時 X坐上的位置              fromYDelta  屬性為動畫超始時 Y坐上的位置              toYDelta    屬性為動畫結束時 Y坐上的位置   注意:沒有指定任何參數時,默認是以自己為參照物          長整型值:duration   屬性為動畫持續時間  說明:時間以毫秒為單位 --------------------------------------------rotate ------------------------------------------------     rotate 旋轉動畫效果        屬性:interpolator 指定一個動畫的插入器        android自帶有三種動畫插入器: accelerate_decelerate_interpolator 加速、減速動畫插入器                          accelerate_interpolator        加速 動畫插入器                            decelerate_interpolator        減速動畫插入器        其它動畫效果:         浮點數型值:fromDegrees 屬性為動畫起始時物件的角度              toDegrees    屬性為動畫起始時物件旋轉的角度 可以大于360度        說明:當角度為負數--表示逆時針旋轉           當角度為正數--表示順時針旋轉            (负数from——to正数:顺时针旋转)  
                         (负数from——to负数:逆时针旋转)
                         (正数from——to正数:顺时针旋转)
                         (正数from——to负数:逆时针旋转)                pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置
               
                说明:        以上两个属性值 从0%-100%中取值
                             50%为物件的X或Y方向坐标上的中点位置

              长整型值: duration 属性为动画持续时间 说明:       时间以毫秒为单位
------------------------------------------------------------可愛的分割線---------------------------------------基本知識點如上:希望大家能耐心看完,下面正式進入代碼實例按照以往慣例,先上項目運行效果圖:
代碼片段一:
  1. adpater=new ArrayAdapter<String>(this,
  2.                 android.R.layout.simple_spinner_item,dropDownData);
  3.         //此句代碼意思為通過我們後面定義在layout的style文件為下拉框定義樣式
  4.         //adpater.setDropDownViewResource(R.layout.dropdown);
  5.         
  6.         adpater.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  7.         //通過上面為適配器附加數據和指定樣式之后,,把適配器放進下拉框
  8.         mSpinner.setAdapter(adpater);
复制代码
上述代碼通過定義一個 ArrayAdapter<String> 通過使用R.array.MyCountry 訪問事先定義好的集合將一個數組加載進給它,之后設置adpater 的樣式,在這里我使用了android默認的樣式,如果喜歡自定義下拉框的可以用上面那段代碼,具體xml文件如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <TextView android:text="@+id/TextView01" android:id="@+id/TextView01"
  3. android:layout_width="wrap_content" android:layout_height="24sp"
  4. android:singleLine="true"
  5. style="?android:attr/spinnerDropDownItemStyle" 
  6. xmlns:android="http://schemas.android.com/apk/res/android">
  7. </TextView>
复制代码
代碼片段二:
  1. addButton.setOnClickListener(new OnClickListener() {
  2.             
  3.             @Override
  4.             public void onClick(View v) {
  5.                 // TODO Auto-generated method stub
  6.                  
  7.                 String test=myEditText.getText().toString();
  8.                  
  9.                      for(int i=0;i<adpater.getCount();i++)
  10.                      {
  11.                          if(test.equals(adpater.getItem(i)))
  12.                          {
  13.                              Show("存在相同的值");
  14.                              return;
  15.                          }
  16.                      }
  17.                      if(test.length()>0)
  18.                      {
  19.                          adpater.add(test);
  20.                          int position=adpater.getPosition(test);
  21.                          mSpinner.setSelection(position); 
  22.                      }      
  23.             }
  24.         });
复制代码
效果圖上所示,我們有一個文本框,當用戶向文本框輸入value時,并同時點擊添加按鈕,將會把value加入Spinner并同時選中,這里用的還是apapter,因為上面我們己經給它綁定數據了,此時向adapter添加數據時,Spinner也會跟著同步顯示代碼片段三:
  1. removeButton.setOnClickListener(new OnClickListener() {
  2.             
  3.             @Override
  4.             public void onClick(View v) {
  5.                 // TODO Auto-generated method stub
  6.                  if(mSpinner.getSelectedItem().toString()!=adpater.getItem(0))
  7.                  {
  8.                      new AlertDialog.Builder(testSpinner.this)
  9.                      .setTitle("提示")
  10.                      .setMessage("確定刪除嗎?")
  11.                      .setPositiveButton("確定", new DialogInterface.OnClickListener() {
  12.                         
  13.                         @Override
  14.                         public void onClick(DialogInterface dialog, int which) {
  15.                             // TODO Auto-generated method stub
  16.                              adpater.remove(mSpinner.getSelectedItem().toString());
  17.                         }
  18.                     })
  19.                     .setNeutralButton("取消", null).show();
  20.                     
  21.                  }
  22.                  if(adpater.getCount()==1)
  23.                  {
  24.                      Show("己經沒有數據可以刪除");
  25.                  }
  26.             }
  27.         });
复制代码
刪除操作,這里用到了提示對話框,如果選中的不是”請選擇“也就是   adpater.getItem(0)不是這個值,就進行刪除相關操作。代碼片段四:
  1. mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

  2.             @Override
  3.             public void onItemSelected(AdapterView<?> arg0, View arg1,
  4.                     int arg2, long arg3) {
  5.                 // TODO Auto-generated method stub
  6.                 if(adpater.getItem(arg2)!=adpater.getItem(0))
  7.                 { 
  8.                     Show(adpater.getItem(arg2));
  9.                 } 
  10.             }

  11.             @Override
  12.             public void onNothingSelected(AdapterView<?> arg0) {
  13.                 // TODO Auto-generated method stub
  14.                 
  15.             }
  16.         });
  17.         
  18.         myAnimation=new TranslateAnimation(0, -100, 0.0f, 0.0f);
  19.         myAnimation.setDuration(3000);
  20.         
  21.       //  myAnimation=AnimationUtils.loadAnimation(this, R.layout.anim);
  22.         mSpinner.setOnTouchListener(new OnTouchListener() {
  23.             
  24.             @Override
  25.             public boolean onTouch(View v, MotionEvent event) {
  26.                 // TODO Auto-generated method stub
  27.                 v.startAnimation(myAnimation);
  28.                 return false;
  29.             }
  30.         });
复制代码
上述代碼就是我們本例的關鍵代碼,先看onItemSelected這個事件,當spinner選擇改變后激發,代碼在編寫的時候遇到個問題,就是一加載Spinner會把”請選擇“這個提示用戶操作的話也彈出來,在實際項目中這是不用處理的,所以 加上這個判斷 if(adpater.getItem(arg2)!=adpater.getItem(0)),不知道為什麽,直接用字符串判斷不起效果的,比如if(adpater.getItem(arg2)!=”請選擇“)這用的操作似乎不起效果。       代碼中用到的動畫代碼,這里我并沒有為它做XML文件來加載,而是直接寫入數值,如果有朋友想用XML加載的話可以選建一個XML文件,文件大致代碼如下:
  1. <set xmlns:android="http://schemas.android.com/apk/res/android">
  2. <translate
  3.     android:fromXDelta ="0"
  4.     android:toXDelta ="-100" 
  5.     android:duration="300"
  6. ></translate>



  7. </set>
复制代码
 這里我只用到了一個translate,想定義多個,可以參照上文我給出的知識點,做相應處理。建完XML調用myAnimation=AnimationUtils.loadAnimation(this, R.layout.anim);這個方法即可將XML文件我們定義好的動畫加載進來。用法很簡單,最后用戶要做的就是在你想觸發的事件裏面調用v.startAnimation(myAnimation);V是指事件中傳遞進來的View,參數為:一個動畫的變量。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值