2016-11-18 96 views
0

我使用這個代碼:爲什麼單擊視圖時不會出現動畫?

package com.example.tileanimator; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     GridView gridview = (GridView) findViewById(R.id.gridview); 
     final ImageAdapter ia = new ImageAdapter(this); 
     gridview.setAdapter(ia); 

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

         for(int i = 0; i < ia.getCount(); i++) { 
          if(position != i) { 
           View toFade = ia.getView(i, null, parent); 
           fadeout(toFade); 
            Toast.makeText(MainActivity.this, "Fading out: " + i, 
             Toast.LENGTH_SHORT).show(); 
          } 
         } 
      } 
     }); 
    } 

    private void fadeout(View v) {; 

     v.setAlpha(1f); 
     v.setVisibility(View.VISIBLE); 

     v.animate() 
       .alpha(0f) 
       .setDuration(1000); 

    } 
} 

基本上,例如這裏找到:https://developer.android.com/guide/topics/ui/layout/gridview.html

當我點擊任何圖片,我看到了吐司,但不顯示動畫。任何想法爲什麼?

(我也困惑是否爲空傳遞作爲第二個參數getView()是一個好主意,如果是這樣,是什麼,而不是通過)

如果它的事項,我ImageAdapter是在這裏:

package com.example.tileanimator; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

/** 
* Created by xrdawson on 11/17/16. 
*/ 

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

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

    public int getCount() { 
     return mThumbIds.length; 
    } 

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

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

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(mThumbIds[position]); 
     return imageView; 
    } 

    // references to our images 
    private Integer[] mThumbIds = { 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7 
    }; 
} 

回答

0

的問題是,我實際上並沒有檢索在應用程序內查看。通過調用View toFade = ia.getView(i, null, parent);並將null作爲第二個參數,我正在生成一個未附加到視圖層次結構的新視圖。獲取動畫視圖的正確代碼應如下所示:

View toFade = gridview.getChildAt(i); 

if(toFade != null && v != toFade) { 
    fadeout(toFade, i); 
} 
-1

嘗試使用

fade(v) 

代碼,而不是,看看它是否工作。

+0

該功能從哪裏來?你的意思是說,重命名它? – xrd

0
  • 首先將你的烤麪包在淡入淡出方法中移動。確認Fade功能正常。

  • 其次,我注意到你的淡出方法的第一個大括號後面有一個不必要的分號。刪除它

    p ....(View v){; < ----------

  • 第三,你對v應用了alpha嗎?

    v.setAlpha(1f); 
    v.animate() 
         .alpha(0f) 
    

刪除初始之一。一個應該就夠了。

  • 第四抵消.setDuration右後clicklistener,同樣:

    private void fadeout(View v) {; 
        v.setAlpha(1f); 
        v.setVisibility(View.VISIBLE); 
    
        v.animate() 
         .alpha(0f) 
         .setDuration(1000) 
         .setListener(null); 
    
  • 最後,如果前面所有的幫助不是,然後通過將網格視圖的淡出方法進行,還可以使用switch語句

    private void fadeout(View v) { 
    
        switch(v.getId()){ 
    
    
        case R.id.gridview: 
    
    
    
    
    gridview.setVisibility(View.VISIBLE); 
    gridview.animate() 
         .alpha(0f) 
         .setDuration(1000) 
         .setListener(null); 
    
    
    
        break; 
    
    } 
    
相關問題