android添加购物车动画实现

商品列表Adapter


import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
/**
 * 商品列表Adapter
 * @author antkingwei
 *
 */
public class GoodAdapter extends BaseAdapter{
    private Context mContext;
    private LayoutInflater layoutInflater;
    private HolderClickListener mHolderClickListener;
    final class ViewHolder {
        ImageView imgview;
        Button button;
    }
    public GoodAdapter(Context context){
        this.mContext = context;
        layoutInflater = LayoutInflater.from(mContext);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 16;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final int selectedId = position;
        final ViewHolder viewHolder;
        if(convertView ==null){
            viewHolder = new ViewHolder();
            convertView = layoutInflater.inflate(R.layout.adapter_listview, null);
            viewHolder.imgview = (ImageView)convertView.findViewById(R.id.item_img);
            viewHolder.button = (Button)convertView.findViewById(R.id.item_button);
            convertView.setTag(viewHolder);
        }else{
            viewHolder =(ViewHolder)convertView.getTag();
        }
        viewHolder.button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(mHolderClickListener!=null){
                    int[] start_location = new int[2];
                    viewHolder.imgview.getLocationInWindow(start_location);//获取点击商品图片的位置
                    Drawable drawable = viewHolder.imgview.getDrawable();//复制一个新的商品图标
                    mHolderClickListener.onHolderClick(drawable,start_location);
                }
            }
        });
        return convertView;
    }
    public void SetOnSetHolderClickListener(HolderClickListener holderClickListener){
        this.mHolderClickListener = holderClickListener;
    }
    public interface HolderClickListener{
        public void onHolderClick(Drawable drawable,int[] start_location);
    }

}

活动类 

package com.example.addshopcart;
import com.example.addshopcart.GoodAdapter.HolderClickListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ListView;
/**
 *
 * @author antkingwei
 *
 */
public class MainActivity extends Activity {
    private ListView listView;
    private Button cart_btn;
    private GoodAdapter goodAdapter;
    //动画时间
    private int AnimationDuration = 1000;
    //正在执行的动画数量
    private int number = 0;
    //是否完成清理
    private boolean isClean = false;
    private FrameLayout animation_viewGroup;
    private Handler myHandler = new Handler(){
      public void handleMessage(Message msg){
          switch(msg.what){
          case 0:
              //用来清除动画后留下的垃圾
              try{
                  animation_viewGroup.removeAllViews();
                  }catch(Exception e){

                  }

                  isClean = false;

              break;
           default:
                  break;
          }
      }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView)this.findViewById(R.id.listview);
        cart_btn = (Button)this.findViewById(R.id.button);
        animation_viewGroup = createAnimLayout();
        goodAdapter = new GoodAdapter(this);
        goodAdapter.SetOnSetHolderClickListener(new HolderClickListener(){

            @Override
            public void onHolderClick(Drawable drawable,int[] start_location) {
                // TODO Auto-generated method stub
                 doAnim(drawable,start_location);

            }

        });
        listView.setAdapter(goodAdapter);
    }

    private void doAnim(Drawable drawable,int[] start_location){
        if(!isClean){
            setAnim(drawable,start_location);
        }else{
            try{
              animation_viewGroup.removeAllViews();
              isClean = false;
              setAnim(drawable,start_location);
            }catch(Exception e){
                e.printStackTrace();
            }
            finally{
                isClean = true;
            }
        }
    }
    /**
     * @Description: 创建动画层
     * @param
     * @return void
     * @throws
     */
    private FrameLayout createAnimLayout(){
        ViewGroup rootView = (ViewGroup)this.getWindow().getDecorView();
        FrameLayout animLayout = new FrameLayout(this);
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.MATCH_PARENT);
        animLayout.setLayoutParams(lp);
        animLayout.setBackgroundResource(android.R.color.transparent);
        rootView.addView(animLayout);
        return animLayout;

    }

    /**
     * @deprecated 将要执行动画的view 添加到动画层
     * @param vg
     *        动画运行的层 这里是frameLayout
     * @param view
     *        要运行动画的View
     * @param location
     *        动画的起始位置
     * @return
     */
    private View addViewToAnimLayout(ViewGroup vg,View view,int[] location){
        int x = location[0];
        int y = location[1];
        vg.addView(view);
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
                dip2px(this,90),dip2px(this,90));
        lp.leftMargin = x;
        lp.topMargin = y;
        view.setPadding(5, 5, 5, 5);
        view.setLayoutParams(lp);

        return view;
    }
    /**
     * dip,dp转化成px 用来处理不同分辨路的屏幕
     * @param context
     * @param dpValue
     * @return
     */
    private int dip2px(Context context,float dpValue){
        float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dpValue*scale +0.5f);
    }

   /**
    * 动画效果设置
    * @param drawable
    *       将要加入购物车的商品
    * @param start_location
    *        起始位置
    */
   private void setAnim(Drawable drawable,int[] start_location){

       Animation mScaleAnimation = new ScaleAnimation(1.5f,0.0f,1.5f,0.0f,Animation.RELATIVE_TO_SELF,0.1f,Animation.RELATIVE_TO_SELF,0.1f);
       mScaleAnimation.setDuration(AnimationDuration);
       mScaleAnimation.setFillAfter(true);

       final ImageView iview = new ImageView(this);
       iview.setImageDrawable(drawable);
       final View view = addViewToAnimLayout(animation_viewGroup,iview,start_location);
       view.setAlpha(0.6f);

       int[] end_location = new int[2];
       cart_btn.getLocationInWindow(end_location);
       int endX = end_location[0];
       int endY = end_location[1]-start_location[1];

       Animation mTranslateAnimation = new TranslateAnimation(0,endX,0,endY);
       Animation mRotateAnimation = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
       mRotateAnimation.setDuration(AnimationDuration);
       mTranslateAnimation.setDuration(AnimationDuration);
       AnimationSet mAnimationSet = new AnimationSet(true);

       mAnimationSet.setFillAfter(true);
       mAnimationSet.addAnimation(mRotateAnimation);
       mAnimationSet.addAnimation(mScaleAnimation);
       mAnimationSet.addAnimation(mTranslateAnimation);

       mAnimationSet.setAnimationListener(new AnimationListener(){

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub
            number++;
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            // TODO Auto-generated method stub

            number--;
            if(number==0){
                isClean = true;
                myHandler.sendEmptyMessage(0);
            }

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

       });
       view.startAnimation(mAnimationSet);

   }
   /**
    * 内存过低时及时处理动画产生的未处理冗余
    */
    @Override
   public void onLowMemory() {
    // TODO Auto-generated method stub
        isClean = true;
        try{
            animation_viewGroup.removeAllViews();
        }catch(Exception e){
            e.printStackTrace();
        }
        isClean = false;
     super.onLowMemory();
   }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listview"
        ></ListView>
    <Button
        android:layout_alignBottom="@+id/listview"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="购物车"
        />

</RelativeLayout>

AdapterItem布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
    <ImageView
        android:id="@+id/item_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:layout_alignParentLeft="true"
        />
    <Button
       android:id="@+id/item_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"
       android:text="添加"
       >
    </Button>

</RelativeLayout>

转自:http://www.oschina.net/code/snippet_203635_27426

时间: 2024-08-29 21:29:16

android添加购物车动画实现的相关文章

android 添加到购物车怎么实现?

问题描述 android 添加到购物车怎么实现? 按一下"添加购物车"添加相应的物品到购物车,物品包含3个属性有,id.价格.数量. 该怎么实现这些代码呢? 解决方案 Android基础知识[项目实训-添加购物车][8]http://blog.csdn.net/freeman527/article/details/42171147 解决方案二: Android 实现购物车动画效果Android 实现蘑菇街购物车动画效果Android 实现蘑菇街购物车动画效果 解决方案三: 通过inte

android listview-android购物车如何实现?

问题描述 android购物车如何实现? android购物车实现思路,求大神指点一下,所有的商品都通过json解析取到数据了,并且填充在相应的空间上,如何通过一个按钮把选中的某项item传递到另一个activity中显示呢? 解决方案 1)启动另一个activity之前,将所需要的数据塞进一个bundle里面,将bundle塞进intent里面,启动另外一个activity.getIntent(),然后取出bundle-- 2)使用一个普通java类,设置一个静态成员,跳转之前存放,跳转之后直

Android 实现蘑菇街购物车动画效果

转自:http://blog.csdn.net/wangjinyu501/article/details/38400479   使用过蘑菇街的用户基本上都知道有一个加入购物车的动画效果,此处不具体描述想知道的可以去下载体验一下. 1.思路   目前想到两种方式实现这种效果,一是使用Tween动画,直截了当的进行一个移动,蘑菇街就是使用这样的方法.二是使用WindowManager创建一个View,然后对这个View进行移动. 2.实现   本文先用方式一方法实现,之后会用方式二方法实现.   方

android-Android 视频添加小动画

问题描述 Android 视频添加小动画 请问一下,Android 播放视频时给视频添加小动画,怎么实现,有什么思路 解决方案 可以在res的anim中添加一个xml文件,里面写上动画的xml脚本 解决方案二: select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 解决方案三: 就像这种效果 解决方案四: 可以通过逐帧和补间

[译] 如何创建 BubblePicker – Android 多彩菜单动画

本文讲的是[译] 如何创建 BubblePicker – Android 多彩菜单动画, 原文地址:How We Created BubblePicker – a Colorful Menu Animation for Android 原文作者:Irina Galata, Yuliya Serbenenko 译文出自:掘金翻译计划 译者:hackerkevin 校对者:luoqiuyu phxnirvana 如何创建 BubblePicker – Android 多彩菜单动画 我们已经习惯了移动

鲜果联播-android 加入购物车界面实现 急求大神解惑

问题描述 android 加入购物车界面实现 急求大神解惑 最近做购物车,在加入购物车这个界面这里遇到了问题,跪求大神指教,上图是我现在实现的效果,每个属性我都能实现单选效果,也能获得每个属性的id,但是需求要求我做来像淘宝那样,所有的组合都对应一个唯一的价格,并显示在上面,每个组合都有一个库存,如果库存为0的话,按钮会变成灰色,下面是淘宝的效果,比如我点了白色,下面的套餐类型都是有库存的,那么套餐类型下面所有按钮都是亮的(表示可以选中),如果我点了桃粉色,套餐类型下面的套餐四和套餐五就没有库存

我的Android进阶之旅------&amp;gt;Android之Animations动画详解

一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画

Android dialog上动画的问题

问题描述 Android dialog上动画的问题 Activity上有ListView,点击ListView的Item会弹出dialog,点击dialog上的+号演示一个小球从+号飞到Activity底部的购物车的动画,想了好几天无法实现这个动画,要么这个动画是在dialog的后面,要么这个动画只能在dialog的范围内,求大神赐教!谢谢!! 下面贴我的代码 public class MainActivity extends Activity implements OnClickListene

Android抛物线下载动画制作过程_Android

下载动画经常出现在下载需求多的app中,比如游戏下载平台,应用市场-- 先看看效果图: 实现 private void startAnim() { //以bitmap创建new ImageView iv.setDrawingCacheEnabled(true); Bitmap bitmap = iv.getDrawingCache(); ImageView logo = new ImageView(this); logo.setScaleType(ImageView.ScaleType.FIT_