天天看點

帶有動畫效果的Gallery控件

帶有動畫效果的Gallery控件

由于項目想做得更加漂亮一些,想做一個滑動的标題欄,每個item對應各自的listview,經過幾天終于寫出來,先上界面效果

帶有動畫效果的Gallery控件

所有的設計思路會在下面幾篇裡講述出來,這一篇先講一下我搜到的一個朋友的說法 一次隻想撥動一個item,系統的gallery輕輕一撥。。。嗖的一下跑到最後一項了,或者想做更炫的動畫效果的時候就需要我們自定義一個gallery

帶有動畫效果的Gallery控件
  1. Android中Gallery 點選圖檔放大的思路:
  2. 第一、可以通過Matrix對象來變換圖像,在選擇的時候放大,在失去焦點的時候,縮小到原來的大小。
  3. 推薦閱讀:Android gallery滑動慣性問題
  4. double  scale =  1.2;
  5. int width = bm.getWidth();
  6. int height = bm.getHeight();
  7. Log.i("size:", width+"");
  8. float scaleWidth = (float)(scale*width);
  9. float scaleHeight = (float)(scale*height);
  10. Log.i("size:", scaleWidth+"");
  11. Matrix matrix = new Matrix();
  12. matrix.postScale(scaleWidth, scaleHeight);
  13. bm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
  14.   第二 、通過動畫
  15. <?xml version="1.0" encoding="utf-8"?>
  16. <scale
  17. xmlns:android=
  18. android:interpolator="@android:anim/decelerate_interpolator"
  19. android:fromXScale="1"
  20. android:toXScale="1.1"
  21. android:fromYScale="1"
  22. android:toYScale="1.1"
  23. android:pivotX="50%"
  24. android:pivotY="50%"
  25. android:duration="500">
  26. </scale>
  27.   第三、通過setLayoutParams
  28. view.setLayoutParams(new Gallery.LayoutParams(150,150));
  29. int mCounts = g.getCount() - 1;
  30. if(position>0 && (position < mCounts))
  31. {
  32.   g.getChildAt(position - 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
  33.   g.getChildAt(position + 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
  34. }
  35. if(position == 0)
  36. {
  37.   g.getChildAt(position + 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
  38. }
  39. if(position == mCounts)
  40. {
  41.   g.getChildAt(position - 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
  42. }
  43. 注釋:其中(136, 88)是gallery中圖檔的大小,是在ImageAdapter裡面設定的。(150,150)是選中圖檔放大後的大小,可以随便設定,隻要跟(136, 88)差別就行了,是為了觀察變化,我設定的是150而已。
  44.   第四 、通過動畫和LayoutParam結合
  45. gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
  46. @Override
  47. public
  48. void onItemSelected(AdapterView<?> arg0, View arg1,
  49. int arg2, long arg3) { 
  50. ImageView v = (ImageView)arg1;
  51. if(tempView != null && v.hashCode() != tempView.hashCode()){
  52. tempView.setLayoutParams(new Gallery.LayoutParams(50,50));
  53. }
  54. v.startAnimation(toLarge);
  55. tempView = v;
  56. v.setLayoutParams(new Gallery.LayoutParams(60,60));
  57. //
  58. //v.setLayoutParams(new Gallery.LayoutParams(130,130));
  59. tvName.setText(tempList.get(arg2).getPicName());
  60. }
  61. @Override,
  62. public
  63. void onNothingSelected(AdapterView<?> arg0) {
  64. tvName.setText("Nothing selected .");
  65. }
  66. });