由於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 属性为动画持续时间说明: 时间以毫秒为单位
------------------------------------------------------------可愛的分割線----------------------------------------------

基本知識點如上:希望大家能耐心看完,下面正式進入代碼實例

按照以往慣例,先上項目運行效果圖:

Android小項目之--動畫和下拉框的相互應用 (附源碼)

代碼片段一:

代码 adpater = new ArrayAdapter < String > ( this ,
android.R.layout.simple_spinner_item,dropDownData);
// 此句代碼意思為通過我們後面定義在layout的style文件為下拉框定義樣式
// adpater.setDropDownViewResource(R.layout.dropdown);

adpater.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 通過上面為適配器附加數據和指定樣式之后,,把適配器放進下拉框
mSpinner.setAdapter(adpater);

上述代碼通過定義一個ArrayAdapter<String> 通過使用R.array.MyCountry 訪問事先定義好的集合將一個數組加載進給它,之后設置adpater 的樣式,在這里我使用了android默認的樣式,如果喜歡自定義下拉框的可以用上面那段代碼,具體xml文件如下:

         

代码 <? xmlversion = " 1.0 " encoding = " UTF-8 " ?>
< TextViewandroid:text = " @+id/TextView01 " android:id = " @+id/TextView01 "
android:layout_width
= " wrap_content " android:layout_height = " 24sp "
android:singleLine
= " true "
style
= " ?android:attr/spinnerDropDownItemStyle "
xmlns:android
= " http://schemas.android.com/apk/res/android " >
</ TextView >

代碼片段二:

代码 addButton.setOnClickListener( new OnClickListener(){

@Override
public void onClick(Viewv){
// TODOAuto-generatedmethodstub

Stringtest
= myEditText.getText().toString();

for ( int i = 0 ;i < adpater.getCount();i ++ )
{
if (test.equals(adpater.getItem(i)))
{
Show(
" 存在相同的值 " );
return ;
}
}
if (test.length() > 0 )
{
adpater.add(test);
int position = adpater.getPosition(test);
mSpinner.setSelection(position);
}
}
});

效果圖上所示,我們有一個文本框,當用戶向文本框輸入value時,并同時點擊添加按鈕,將會把value加入Spinner并同時選中,這里用的還是apapter,因為上面我們己經給它綁定數據了,此時向adapter添加數據時,Spinner也會跟著同步顯示

代碼片段三:

代码 removeButton.setOnClickListener( new OnClickListener(){

@Override
public void onClick(Viewv){
// TODOAuto-generatedmethodstub
if (mSpinner.getSelectedItem().toString() != adpater.getItem( 0 ))
{
new AlertDialog.Builder(testSpinner. this )
.setTitle(
" 提示 " )
.setMessage(
" 確定刪除嗎? " )
.setPositiveButton(
" 確定 " , new DialogInterface.OnClickListener(){

@Override
public void onClick(DialogInterfacedialog, int which){
// TODOAuto-generatedmethodstub
adpater.remove(mSpinner.getSelectedItem().toString());
}
})
.setNeutralButton(
" 取消 " , null ).show();

}
if (adpater.getCount() == 1 )
{
Show(
" 己經沒有數據可以刪除 " );
}
}
});

刪除操作,這里用到了提示對話框,如果選中的不是”請選擇“也就是   adpater.getItem(0)不是這個值,就進行刪除相關操作。

代碼片段四:

代码 mSpinner.setOnItemSelectedListener( new OnItemSelectedListener(){

@Override
public void onItemSelected(AdapterView <?> arg0,Viewarg1,
int arg2, long arg3){
// TODOAuto-generatedmethodstub
if (adpater.getItem(arg2) != adpater.getItem( 0 ))
{
Show(adpater.getItem(arg2));
}
}

@Override
public void onNothingSelected(AdapterView <?> arg0){
// TODOAuto-generatedmethodstub

}
});

myAnimation
= new TranslateAnimation( 0 , - 100 , 0.0f , 0.0f );
myAnimation.setDuration(
3000 );

// myAnimation=AnimationUtils.loadAnimation(this,R.layout.anim);
mSpinner.setOnTouchListener( new OnTouchListener(){

@Override
public boolean onTouch(Viewv,MotionEventevent){
// TODOAuto-generatedmethodstub
v.startAnimation(myAnimation);
return false ;
}
});

上述代碼就是我們本例的關鍵代碼,先看onItemSelected這個事件,當spinner選擇改變后激發,代碼在編寫的時候遇到個問題,就是一加載Spinner會把”請選擇“這個提示用戶操作的話也彈出來,在實際項目中這是不用處理的,所以 加上這個判斷if(adpater.getItem(arg2)!=adpater.getItem(0)),不知道為什麽,直接用字符串判斷不起效果的,比如if(adpater.getItem(arg2)!=”請選擇“)這用的操作似乎不起效果。

代碼中用到的動畫代碼,這里我并沒有為它做XML文件來加載,而是直接寫入數值,如果有朋友想用XML加載的話可以選建一個XML文件,文件大致代碼如下:

< set xmlns:android ="http://schemas.android.com/apk/res/android" >
< translate
android:fromXDelta ="0"
android:toXDelta
="-100"
android:duration
="300"
></ translate >



</ set >

    這里我只用到了一個translate,想定義多個,可以參照上文我給出的知識點,做相應處理。建完XML調用myAnimation=AnimationUtils.loadAnimation(this, R.layout.anim);這個方法即可將XML文件我們定義好的動畫加載進來。用法很簡單,最后用戶要做的就是在你想觸發的事件裏面調用v.startAnimation(myAnimation);V是指事件中傳遞進來的View,參數為:一個動畫的變量。

至此功能以經完成,考慮到篇輻問題,這里就先不把所有代碼貼出來,想要的朋友去我附件下載。後續將針對不同動畫的效果作出例子出來,希望你能關注。

源碼下載:/Files/TerryBlog/testSpinner.rar

如果你有什麽疑問或者建議, 請:QQ285735932 或 Email:[email protected],如果你覺得這篇文章對您有幫助,請別忘了推薦,謝謝。

 

更多相关文章

  1. android 从文件制定位置读取数据
  2. Android实现疯狂连连看游戏之游戏效果预览(一)
  3. Android中RatingBar的自定义效果
  4. Android实现多行文字的跑马灯效果(Realizing multiple lines of M
  5. Android动画效果 translate、scale、alpha、rotate 切换Acti...
  6. 为Android的界面设计增加跳跃效果
  7. Android\OPhone动画分析之翻转效果
  8. Android 实现自定义控件效果1
  9. Android ImageView点击效果

随机推荐

  1. android页面管理器。可以实现完整退出and
  2. Android中添加布局和初始化布局总结
  3. Android图片缩放效果代码
  4. android IOC框架学习记录
  5. Android SDK Manager更新版慢解决办法
  6. cocos2d-x eclipse android 配置注意项(
  7. ubuntu10.04上android环境安装 “org.ecl
  8. [置顶] 近百android开源项目贡献
  9. Android 倒计时(支持小时,分钟)
  10. Android学习日记(1)