商品列表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


更多相关文章

  1. AdapterTest
  2. 简单的四种动画Demo
  3. Android--等待loading
  4. Android(安卓)ConstraintLayout Toolbar
  5. 自定义对话框 位置 大小等
  6. Google play pay 消耗商品 demo
  7. android——ObjectAnimator动画(一)
  8. SplashscreenActivity随笔
  9. Android中属性动画2----ObjectAnimator监听的使用

随机推荐

  1. 复习android SQLiteOpenHelper
  2. android studio
  3. Android(安卓)获取当前进程
  4. 为Android封装的HTTP请求组件
  5. android 中遇到的空指针异常
  6. Android连接指定WIFI
  7. Android中设置146种颜色相对应的xml值
  8. Android常用权限
  9. android之SeekBar控件用法
  10. android识别 单击和双击事件