2016-11-24 81 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