2012-10-20 3 views
0

12x3 격자로 배열 된 12 개의 요소가있는 GridView가 있습니다. 각 요소는 ImageView와 그 아래 TextView를 포함하는 grid_item.xml이라는 레이아웃입니다. 처음에는 ImageView가 타일 이미지입니다. GridView 요소 중 하나를 클릭하거나 터치하면 ImageView에 애니메이션이 적용되어 이미지 뷰를 축소하고 TextView를 아래에 나타냅니다.Android Gridview 애니메이션이 최종 항목에서 작동하지 않습니다.

이 모든 것은 GridView의 마지막 (오른쪽 하단) 요소를 제외하고는 모두 잘 작동합니다. (안드로이드 에뮬레이터에서, 장치에서 테스트하지 않은) 그것을 클릭하면 클릭 이벤트 (grid_click)가 호출되지만 "onAnimationStart"리스너는 호출되지 않습니다. 은 다른 GridView 요소를 클릭 할 때이 호출됩니다.). 내가 어떤 다른 요소를 클릭하면

TEST 시작 애니메이션이

그러나 애니메이션이 잘 작동하고

: 나는 어떤 애니메이션이 없다 우측 하단의 GridView 요소를 클릭하고 내가 로그 캣에서 볼 즉

, 로그 캣에서 나는 참조 :

테스트 시작 애니메이션

TEST

로그 캣 미상

onAnimationStart 문제를 나타 내기 위해 다른 것을 출력하지 마십시오. 누구든지 이것을 이해하려고 노력하면서 며칠을 보냈다. 여기
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<scale android:pivotX="50%" android:pivotY="50%" android:fromXScale="1" android:fromYScale="1" android:toXScale="0" android:toYScale="0" android:duration="250" /> 
<rotate android:fromDegrees="0" android:toDegrees="180" android:pivotX="50%" android:pivotY="50%" android:duration="250" /> 
</set> 

가의 GridView의 각 항목에 대해 레이아웃이다,라는 grid_item.xml :

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ImageView 
     android:id="@+id/grid_item_image" 
     android:src="@drawable/tile" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    /> 

    <TextView 
    android:id="@+id/grid_item_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:textStyle="bold" 
    android:textSize="17sp" 
    android:shadowColor="#555555" 
    android:shadowDx="1.0" 
    android:shadowDy="1.0" 
    android:shadowRadius="1.5" 
    /> 
</FrameLayout> 
다음
private void init_gridview() 
{ 
     setContentView(R.layout.game); 
     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setNumColumns(3); 
     gridview.setColumnWidth(32); 
     gridview.setAdapter(new ImageAdapter(this)); 

     gridview.setOnItemClickListener(new OnItemClickListener() 
     { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
      { 
       grid_click(position,v); 
      } 
     }); 
} 

public class ImageAdapter extends BaseAdapter 
{ 
     private Context mContext; 

     public ImageAdapter(Context c) 
     { 
      mContext = c; 
     } 

     public int getCount() 
     { 
      return(3*4); 
     } 

     public Object getItem(int position) 
     { 
      return null; 
     } 

     public long getItemId(int position) 
     { 
      return 0; 
     } 

     // inflate grid_item.xml and return a View combining textview and imageview 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View MyView = convertView; 

      if (convertView == null) 
      { 
       LayoutInflater li = getLayoutInflater(); 
       MyView = li.inflate(R.layout.grid_item, null); 
      } 
      else 
      { 
       MyView=convertView; 
      } 

      TextView tv = (TextView)MyView.findViewById(R.id.grid_item_text); 
      tv.setText("something"); 

      ImageView iv = (ImageView)MyView.findViewById(R.id.grid_item_image); 
      iv.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      iv.setPadding(0,0,0,0); 
      iv.setImageResource(R.drawable.tile); 

      MyView.setLayoutParams(new GridView.LayoutParams(32,32)); 
      return(MyView); 
    } 
} 

private void grid_click(int position, View v) 
{ 
    View clicked_view=v; 

    Animation scale_down = AnimationUtils.loadAnimation(this, R.anim.scale_down); 

    scale_down.setAnimationListener(new AnimationListener() 
    { 
     public void onAnimationStart(Animation animation) 
     { 
      Log.i("TEST","onAnimationStart"); 
     } 

     public void onAnimationEnd(Animation animation) 
     { 
     } 

     public void onAnimationRepeat(Animation animation) {} 
    }); 

    Log.i("TEST","start animation"); 
    ImageView iv2 = (ImageView)clicked_view.findViewById(R.id.grid_item_image); 
    iv2.startAnimation(scale_down); 
} 

가 scale_down.xml 애니메이션입니다 다음과 같이 내 코드는

마지막으로 game.xml이라는 GridView가 포함 된 메인 레이아웃 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Layout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" 
    android:orientation="vertical" 
    android:gravity="center" 
    android:background="@android:color/white"> 

    <GridView 
      android:id="@+id/gridview" 
      android:background="@android:color/white" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:columnWidth="106dp" 
      android:numColumns="auto_fit" 
      android:verticalSpacing="0dp" 
      android:horizontalSpacing="0dp" 
      android:stretchMode="none" 
      android:gravity="center" 
      android:listSelector="@android:color/transparent" 
     /> 
</LinearLayout> 
gridview에 대한 높이와 레이아웃 wrap_content 사용하지 결코

 android:layout_height="wrap_content" 

 android:layout_height="fill_parent" 

행의 gridview에서 10

답변

관련 문제