帶有動畫效果的Gallery控件
由于項目想做得更加漂亮一些,想做一個滑動的标題欄,每個item對應各自的listview,經過幾天終于寫出來,先上界面效果
所有的設計思路會在下面幾篇裡講述出來,這一篇先講一下我搜到的一個朋友的說法 一次隻想撥動一個item,系統的gallery輕輕一撥。。。嗖的一下跑到最後一項了,或者想做更炫的動畫效果的時候就需要我們自定義一個gallery
- Android中Gallery 點選圖檔放大的思路:
- 第一、可以通過Matrix對象來變換圖像,在選擇的時候放大,在失去焦點的時候,縮小到原來的大小。
- 推薦閱讀:Android gallery滑動慣性問題
- double scale = 1.2;
- int width = bm.getWidth();
- int height = bm.getHeight();
- Log.i("size:", width+"");
- float scaleWidth = (float)(scale*width);
- float scaleHeight = (float)(scale*height);
- Log.i("size:", scaleWidth+"");
- Matrix matrix = new Matrix();
- matrix.postScale(scaleWidth, scaleHeight);
- bm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
- 第二 、通過動畫
- <?xml version="1.0" encoding="utf-8"?>
- <scale
- xmlns:android=
- android:interpolator="@android:anim/decelerate_interpolator"
- android:fromXScale="1"
- android:toXScale="1.1"
- android:fromYScale="1"
- android:toYScale="1.1"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="500">
- </scale>
- 第三、通過setLayoutParams
- view.setLayoutParams(new Gallery.LayoutParams(150,150));
- int mCounts = g.getCount() - 1;
- if(position>0 && (position < mCounts))
- {
- g.getChildAt(position - 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
- g.getChildAt(position + 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
- }
- if(position == 0)
- {
- g.getChildAt(position + 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
- }
- if(position == mCounts)
- {
- g.getChildAt(position - 1).setLayoutParams(new Gallery.LayoutParams(136, 88));
- }
- 注釋:其中(136, 88)是gallery中圖檔的大小,是在ImageAdapter裡面設定的。(150,150)是選中圖檔放大後的大小,可以随便設定,隻要跟(136, 88)差別就行了,是為了觀察變化,我設定的是150而已。
- 第四 、通過動畫和LayoutParam結合
- gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
- @Override
- public
- void onItemSelected(AdapterView<?> arg0, View arg1,
- int arg2, long arg3) {
- ImageView v = (ImageView)arg1;
- if(tempView != null && v.hashCode() != tempView.hashCode()){
- tempView.setLayoutParams(new Gallery.LayoutParams(50,50));
- }
- v.startAnimation(toLarge);
- tempView = v;
- v.setLayoutParams(new Gallery.LayoutParams(60,60));
- //
- //v.setLayoutParams(new Gallery.LayoutParams(130,130));
- tvName.setText(tempList.get(arg2).getPicName());
- }
- @Override,
- public
- void onNothingSelected(AdapterView<?> arg0) {
- tvName.setText("Nothing selected .");
- }
- });