Android攻城狮ViewFlipper
生活随笔
收集整理的這篇文章主要介紹了
Android攻城狮ViewFlipper
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
使用ViewFlipper實(shí)現(xiàn)屏幕切換動(dòng)畫效果。
ViewFlipper和ViewPager一樣,都是Android自帶的一個(gè)多頁(yè)面管理控件,不同的是ViewPager是手動(dòng)切換頁(yè)面,而ViewFlipper可以實(shí)現(xiàn)子界面的自動(dòng)切換。只需設(shè)置切換時(shí)間和切換的動(dòng)畫效果,ViewFlipper里面的視圖就會(huì)自動(dòng)循環(huán)播放。
------------------------
為ViewFlipper添加View
(1)靜態(tài)導(dǎo)入:在layout布局文件中直接導(dǎo)入,不需要寫額外的Java代碼,缺點(diǎn):直接寫死,非常不靈活,所以不推薦使用。
(2)動(dòng)態(tài)導(dǎo)入:addView()方法:
flipper=(ViewFlipper)findViewById(R.i.flipper);
flipper.addView(getImageView(R.drawable.pic1));
flipper.addView(getImageView(R.drawable.pic2));
---------------------------------
ViewFlipper常用的方法:1)、SetInAnimation:設(shè)置View進(jìn)入屏幕時(shí)候使用的動(dòng)畫2)、setOutAnimation:設(shè)置View退出屏幕時(shí)候使用的動(dòng)畫3)、showNext:調(diào)用該函數(shù)來(lái)顯示ViewFlipper里面的下一個(gè)View4)、showPrevious:調(diào)用該函數(shù)來(lái)顯示ViewFlipper里面的上一個(gè)View5)、setFilpInterval:設(shè)置View之間切換的時(shí)間間隔6)、startFlipping:使用上面設(shè)置的時(shí)間間隔來(lái)開(kāi)始切換所有的View,切換會(huì)循環(huán)進(jìn)行7)、stopFlipping:停止View切換
實(shí)現(xiàn)動(dòng)畫效果的步驟 1. 創(chuàng)建文件夾anim,放置實(shí)現(xiàn)動(dòng)畫效果的xml文件。在drawable中放置圖片資源。 2. 在 main.xml中放置<ViewFlipper> 3. 在MainActivity中創(chuàng)建 int數(shù)組,放置圖片id。 4. 初始化ViewFlipper,動(dòng)態(tài)導(dǎo)入子View:for (int i=0;i<resId.length;i++){flipper.addView(getImageView(resId[i]));} 這里自定義了方法 private ImageView getImageView(int resId){ImageView image = new ImageView(this);//image.setImageResource(resId);//不采取此方法的原因:ImageView的寬高完全取決于圖片的寬高,不符合“全屏展示”的要求image.setBackgroundResource(resId);//background可以鋪滿整個(gè)屏幕return image;} 5. 設(shè)置動(dòng)畫效果 //設(shè)置切換的動(dòng)畫效果flipper.setInAnimation(this,R.anim.left_in);//Animation:動(dòng)畫。這里說(shuō)是頁(yè)面進(jìn)入的動(dòng)畫(InAnimation)采用從左進(jìn)入。flipper.setOutAnimation(this,R.anim.left_out);flipper.setFlipInterval(3000);//切換的時(shí)間間隔,單位毫秒flipper.startFlipping();//開(kāi)啟動(dòng)畫
1 //手機(jī)滑動(dòng)-實(shí)現(xiàn)自動(dòng)播放 2 public class MainActivity extends Activity { 3 private ViewFlipper flipper; 4 //資源圖片 5 private int[] resId = { R.drawable.a, R.drawable.b, R.drawable.c, 6 R.drawable.d }; 7 private float startX;//手勢(shì)滑動(dòng)時(shí),手指落下的起始坐標(biāo) 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.main); 13 flipper = (ViewFlipper) findViewById(R.id.fliper); 14 // 動(dòng)態(tài)導(dǎo)入的方式為ViewFlipper加載子view 15 for (int i = 0; i < resId.length; i++) { 16 flipper.addView(getImageView(resId[i])); 17 } 18 19 20 // 方式一:為ViewFlippe添加動(dòng)畫效果實(shí)現(xiàn)自動(dòng)切換圖片 21 22 // flipper.setInAnimation(this, R.anim.abc_slide_in_bottom); 23 // flipper.setOutAnimation(this, R.anim.abc_slide_out_bottom); 24 // 25 // flipper.setFlipInterval(3000);// 3秒切換 為ViewFlippe視圖切換的時(shí)間間隔 26 // flipper.startFlipping();// 開(kāi)始播放 27 28 } 29 30 //方式二:支持手勢(shì)滑動(dòng)的ViewFlipper 31 //監(jiān)控手勢(shì)滑動(dòng)事件的處理 32 @Override 33 public boolean onTouchEvent(MotionEvent event) { 34 // TODO Auto-generated method stub 35 switch (event.getAction()) { 36 // 手指落下 37 case MotionEvent.ACTION_DOWN: { 38 startX = event.getX();//獲得橫向的起始坐標(biāo) 39 break; 40 } 41 42 // 手指滑動(dòng) 43 case MotionEvent.ACTION_MOVE: { 44 // 設(shè)置差值大于100,是為了過(guò)濾掉微小的滑動(dòng) 45 if (event.getX() - startX > 50) { 46 // 向右滑動(dòng) 看前一頁(yè) 47 flipper.setInAnimation(this, R.drawable.left_in); 48 flipper.setOutAnimation(this, R.drawable.left_out); 49 50 flipper.showPrevious();//顯示前一頁(yè) 51 52 } 53 if (startX - event.getX() > 50) { 54 // 向左滑動(dòng) 看后一頁(yè) 55 flipper.setInAnimation(this, R.drawable.right_in); 56 flipper.setOutAnimation(this, R.drawable.right_out); 57 58 flipper.showNext();// 顯示后一頁(yè) 59 } 60 break; 61 } 62 // 手指離開(kāi) 63 case MotionEvent.ACTION_UP: { 64 65 break; 66 } 67 68 } 69 return super.onTouchEvent(event); 70 } 71 72 public ImageView getImageView(int resId) { 73 74 ImageView image = new ImageView(this); 75 // image.setImageResource(resId); 圖片原來(lái)的寬高 76 image.setBackgroundResource(resId);// 鋪滿全屏的 77 return image; 78 79 } 80 81 }
實(shí)現(xiàn)動(dòng)畫效果的步驟 1. 創(chuàng)建文件夾anim,放置實(shí)現(xiàn)動(dòng)畫效果的xml文件。在drawable中放置圖片資源。 2. 在 main.xml中放置<ViewFlipper> 3. 在MainActivity中創(chuàng)建 int數(shù)組,放置圖片id。 4. 初始化ViewFlipper,動(dòng)態(tài)導(dǎo)入子View:for (int i=0;i<resId.length;i++){flipper.addView(getImageView(resId[i]));} 這里自定義了方法 private ImageView getImageView(int resId){ImageView image = new ImageView(this);//image.setImageResource(resId);//不采取此方法的原因:ImageView的寬高完全取決于圖片的寬高,不符合“全屏展示”的要求image.setBackgroundResource(resId);//background可以鋪滿整個(gè)屏幕return image;} 5. 設(shè)置動(dòng)畫效果 //設(shè)置切換的動(dòng)畫效果flipper.setInAnimation(this,R.anim.left_in);//Animation:動(dòng)畫。這里說(shuō)是頁(yè)面進(jìn)入的動(dòng)畫(InAnimation)采用從左進(jìn)入。flipper.setOutAnimation(this,R.anim.left_out);flipper.setFlipInterval(3000);//切換的時(shí)間間隔,單位毫秒flipper.startFlipping();//開(kāi)啟動(dòng)畫
1 //手機(jī)滑動(dòng)-實(shí)現(xiàn)自動(dòng)播放 2 public class MainActivity extends Activity { 3 private ViewFlipper flipper; 4 //資源圖片 5 private int[] resId = { R.drawable.a, R.drawable.b, R.drawable.c, 6 R.drawable.d }; 7 private float startX;//手勢(shì)滑動(dòng)時(shí),手指落下的起始坐標(biāo) 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.main); 13 flipper = (ViewFlipper) findViewById(R.id.fliper); 14 // 動(dòng)態(tài)導(dǎo)入的方式為ViewFlipper加載子view 15 for (int i = 0; i < resId.length; i++) { 16 flipper.addView(getImageView(resId[i])); 17 } 18 19 20 // 方式一:為ViewFlippe添加動(dòng)畫效果實(shí)現(xiàn)自動(dòng)切換圖片 21 22 // flipper.setInAnimation(this, R.anim.abc_slide_in_bottom); 23 // flipper.setOutAnimation(this, R.anim.abc_slide_out_bottom); 24 // 25 // flipper.setFlipInterval(3000);// 3秒切換 為ViewFlippe視圖切換的時(shí)間間隔 26 // flipper.startFlipping();// 開(kāi)始播放 27 28 } 29 30 //方式二:支持手勢(shì)滑動(dòng)的ViewFlipper 31 //監(jiān)控手勢(shì)滑動(dòng)事件的處理 32 @Override 33 public boolean onTouchEvent(MotionEvent event) { 34 // TODO Auto-generated method stub 35 switch (event.getAction()) { 36 // 手指落下 37 case MotionEvent.ACTION_DOWN: { 38 startX = event.getX();//獲得橫向的起始坐標(biāo) 39 break; 40 } 41 42 // 手指滑動(dòng) 43 case MotionEvent.ACTION_MOVE: { 44 // 設(shè)置差值大于100,是為了過(guò)濾掉微小的滑動(dòng) 45 if (event.getX() - startX > 50) { 46 // 向右滑動(dòng) 看前一頁(yè) 47 flipper.setInAnimation(this, R.drawable.left_in); 48 flipper.setOutAnimation(this, R.drawable.left_out); 49 50 flipper.showPrevious();//顯示前一頁(yè) 51 52 } 53 if (startX - event.getX() > 50) { 54 // 向左滑動(dòng) 看后一頁(yè) 55 flipper.setInAnimation(this, R.drawable.right_in); 56 flipper.setOutAnimation(this, R.drawable.right_out); 57 58 flipper.showNext();// 顯示后一頁(yè) 59 } 60 break; 61 } 62 // 手指離開(kāi) 63 case MotionEvent.ACTION_UP: { 64 65 break; 66 } 67 68 } 69 return super.onTouchEvent(event); 70 } 71 72 public ImageView getImageView(int resId) { 73 74 ImageView image = new ImageView(this); 75 // image.setImageResource(resId); 圖片原來(lái)的寬高 76 image.setBackgroundResource(resId);// 鋪滿全屏的 77 return image; 78 79 } 80 81 }
?
?轉(zhuǎn)載于:https://www.cnblogs.com/my334420/p/6714753.html
總結(jié)
以上是生活随笔為你收集整理的Android攻城狮ViewFlipper的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 单片机开发无线控制系列-手机无线超声波测
- 下一篇: 电脑上有什么比较好用的屏幕录制软件