0

我有一个自定义列表视图,其中使用了四个项目,一个图像视图和三个文本视图。对于列表的每个图像视图,我都有五个图像 uri,我想在特定图像视图项目的一段时间内动态更改图像。我应用线程来动态更改图像,但它一次只能处理一项列表视图。我想动态更改 listview 的每个 imageview 项目。我所做的。我是朝着正确的方向前进还是应该尝试其他任何事情。请任何人建议我。我们将非常感谢您的帮助..在此先感谢:)

这是我的 getView 代码-

final AQuery recycle = aq.recycle(view);

final Handler mHandler = new Handler();

// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
public void run() {

           animate_slide(recycle , currentimageindex);
           currentimageindex++;

        if(currentimageindex > 4){
            currentimageindex = 0;
                    }
            }
        };
        Timer timer = new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {

        public void run() {

                   mHandler.post(mUpdateResults);

                  }

            }, delay, period);

以及我要求动画的方法-

private void animate_slide(AQuery recycle ,int ci) {

                            if(ci == 0){
                                Log.d("00000000000000","----------"+ci);
                                recycle.id(R.id.avatar).progress(R.id.progress).image(ApplicationConstants.IMG_URL_SUFFIX+picture.get(currentimageindex), true, true, 100, 0, null, AQuery.FADE_IN);
                            }else if(ci == 1){
                                Log.d("11111111111111","----------"+ci);
                                recycle.id(R.id.avatar).progress(R.id.progress).image(ApplicationConstants.IMG_URL_SUFFIX+picture1.get(currentimageindex), true, true, 100, 0, null, AQuery.FADE_IN);
                            }else if(ci == 2){
                                Log.d("2222222222222222","----------"+ci);
                                recycle.id(R.id.avatar).progress(R.id.progress).image(ApplicationConstants.IMG_URL_SUFFIX+picture2.get(currentimageindex), true, true, 100, 0, null, AQuery.FADE_IN);
                            }else if(ci == 3){
                                Log.d("3333333333333333","----------"+ci);
                                recycle.id(R.id.avatar).progress(R.id.progress).image(ApplicationConstants.IMG_URL_SUFFIX+picture3.get(currentimageindex), true, true, 100, 0, null, AQuery.FADE_IN);
                            }else if(ci == 4){
                                Log.d("00000000000000","----------"+ci);
                                recycle.id(R.id.avatar).progress(R.id.progress).image(ApplicationConstants.IMG_URL_SUFFIX+picture4.get(currentimageindex), true, true, 100, 0, null, AQuery.FADE_IN);

                            }

                        }
4

2 回答 2

0

您可以在 getView xml 文件中使用 Gallary,并且可以在那里进行一些工作

于 2014-04-10T14:01:59.480 回答
0

你不需要让它那么复杂。我认为只有列表中的第一项动画,对吗?

我建议不要使用新的可运行文件,而是getView()像这样更改您的(我假设currentimageindex在您的代码中是项目在 中的位置ListView):

// The view holder for better ListView
private class ViewHolder {
    TextView text1, text2, text3;
    ImageView image;
}

@Override
public View getView(int position, View view, ViewGroup parent) {

    final ViewHolder holder;
    if (view == null) {
        holder = new ViewHolder();
        /* Initialize views and add them to  the ViewHolder
         * 
         * ....
         * 
        */
        // Setting the position as a tag, so we can get it in the runnable
        holder.image.setTag(position);
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                animate_slide(aq.recycle(holder.image), (int) holder.image.getTag());
            }

        }, when, period);
        view.setTag(holder);
    } else holder = (ViewHolder) view.getTag();

    /* do what you want with the texts...
     * 
     * ....
     * 
    */  

    return view;

}

编辑:我想出了一个更简单的解决方案。:) 我们不需要任何其他线程。里面getView()放这段代码,它会自动触发动画:

    // At first we load the animation 
    Animation slideAnimation = AnimationUtils.loadAnimation(context , R.anim.fade_in);
    slideAnimation.setRepeatMode(Animation.INFINITE);

    slideAnimation.setAnimationListener(new AnimationListener(){

        @Override
        public void onAnimationStart(Animation arg0) {/* Nothing*/}

        @Override
        public void onAnimationEnd(Animation animation) {
            yourImageView.setImageResource(R.drawable.newResource);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // Setting a delay after each animation.
            // This is the time between two animations.
            animation.setStartOffset(period);
        }

    });

    yourImageView.startAnimation(slideAnimation);

最后,不要忘记取消动画,因为我们说过slideAnimation.setRepeatMode(Animation.INFINITE);。我建议在您的适配器类中添加此方法:

public void onDestroy() {
    slideAnimation.cancel();
}

这在你的活动中:

    @Override
    public void onDestroy() {
        super.onDestroy();
        yourListAdapter.onDestroy();
    }

希望能帮助到你 :)

于 2014-07-18T07:58:00.550 回答