2016-11-24 82 views
0

我正在嘗試使用Pulsator4Droid。
https://github.com/booncol/Pulsator4DroidAndroid動畫無法在BaseAdapter中工作

它在BaseAdapter之外工作,儘管在適配器內部它不起作用。
我已經在多個基本的BaseAdapter中嘗試過它,但它們都不工作,儘管XML動畫可以...任何想法爲什麼會發生這種情況?

home_menu_grid_pulse_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="center" 
    android:paddingTop="10dp" 
    android:paddingBottom="10dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp"> 

    <pl.bclogic.pulsator4droid.library.PulsatorLayout 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/pulsator" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:pulse_count="4" 
     app:pulse_duration="7000" 
     app:pulse_repeat="0" 
     app:pulse_color="#FF0000" 
     app:pulse_interpolator="Linear" 
     app:pulse_startFromScratch="true" 
     android:layout_gravity="center_horizontal" 
     android:foregroundGravity="center_horizontal" 
     android:gravity="center_horizontal"> 

    </pl.bclogic.pulsator4droid.library.PulsatorLayout> 
</LinearLayout> 

HomeMenuGridAdapter.java:

package com.au.test.helpers.common; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
import com.au.test.R; 
import java.util.List; 
import pl.bclogic.pulsator4droid.library.PulsatorLayout; 

@SuppressLint("InflateParams") 
public class HomeMenuGridAdapter extends BaseAdapter { 

    private final Activity context; 
    private List<HomeMenuItem> array = null; 

    public HomeMenuGridAdapter(Context mContext, List<HomeMenuItem> _list) { 
     context = (Activity) mContext; 
     array = _list; 
    } 

    public int getCount() { 
     return array.size(); 
    } 

    public Object getItem(int position) { 
     return array.get(position); 
    } 

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

    public View getView(final int position, View convertView, ViewGroup arg2) { 
     if (convertView == null) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.home_menu_grid_pulse_item, null); 
     } 

     // Get Controls 
     PulsatorLayout pulsator = (PulsatorLayout) convertView.findViewById(R.id.pulsator); 
     pulsator.start(); 

     return convertView; 
    } 
} 
+0

你可以分享你的代碼和錯誤是不夠好:)嗎? –

+0

顯示您的適配器代碼。 – Chirayu

+0

嗨,大家好,沒有錯誤,它只是不顯示動畫。我會編輯我的問題並分享我的代碼 – Nickmccomb

回答

0

原來這是XML視圖的寬度和高度。

以編程方式設置寬度和高度不適用於pulseView.setIconHeight(200)和pulseView.setIconWidth(200),視圖上的wrap_content或match_parent也不會(即使父窗口全屏顯示:/),我不得不硬編碼的實際尺寸..

我做我的視圖的高度和寬度200像素和它的作品...不是很優雅,但

0

修改像下面的getView方法。你應該使用setTaggetTag的方法來實現這一點。

public View getView(final int position, View convertView, ViewGroup arg2) { 
    if (null == convertView) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.home_menu_grid_pulse_item, null); 
    } 

    // Get Controls 
    PulsatorLayout pulsator = (PulsatorLayout) convertView.findViewById(R.id.pulsator); 
    pulsator.start(); 

    //set tag on converview with your key 
    convertView.setTag("yourKEY"); 
    return convertView; 
} 

適配器之外,你需要使用getTag就像在你的活動之後獲得這種控制的訪問。

View v = yourcontrolobject.findViewWithTag("yourKEY"); 
       if (v != null) { 
        PulsatorLayout obj= (PulsatorLayout) v.findViewById(R.id.pulsator); 

// do whatever you wnat to do now with this obj. 

       } 
+0

Hi Chirayu,這並不能解決視圖無法動畫的問題,它只是將引用移動到Adapter類之外的視圖中。這不是我以前的樣子(而且很糟糕IOC和單元測試等) – Nickmccomb

+0

@Nickmccomb這種方法對我來說非常合適。它會爲您提供確切的位置值,讓您的控制動畫化。可能你是正確的單元測試。我對此不太瞭解。但是這種情況對我有用。 – Chirayu

0

把這個代碼在你的適配器類,它的正常工作...... Have a look at this

public class MyAdapter extends BaseAdapter { 

private Context mContext; 

public MyAdapter(Context context) { 
    mContext = context; 
} 

@Override 
public int getCount() { 
    return 10; 
} 

@Override 
public Object getItem(int i) { 
    return i; 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 
    final ViewHolder viewHolder; 
    if(view == null) { 
     viewHolder = new ViewHolder(); 
     view = LayoutInflater.from(mContext).inflate(R.layout.row_file, viewGroup, false); 

     viewHolder.pulsator = (PulsatorLayout) view.findViewById(R.id.pulsator); 
     viewHolder.tvCount = (TextView) view.findViewById(R.id.tv_count); 
     view.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) view.getTag(); 
    } 

    viewHolder.pulsator.start(); 
    viewHolder.tvCount.setText("My listview row No-> " + i); 
    return view; 
} 

public static class ViewHolder { 
    PulsatorLayout pulsator; 
    TextView tvCount; 
    } 
} 
+0

嗨Bhavnik,我最初嘗試ViewHolder模式,它沒有工作,視圖仍然沒有動畫:( 我會嘗試Devlight,如你所建議的,並讓你知道它是怎麼回事 – Nickmccomb

+0

你改變了你的getView ()方法適配器????因爲它工作正常,我附上了演示的截圖 – Bhavnik