public class GiftWidget extends LinearLayout implements OnClickListener, GiftNumberChangeListener {
private ViewPager mViewPager;
private Button mGiveButton;
private View mNumberView;
private TextView mBalanceTextView;
private TextView mNumberTextView;
private LinearLayout mIndicatorView;
private TextView pay;
private final static int GIFT_MAX_ITEM_SIZE = 10;
private int indicatorSpace = 5;
private int mNumber;
private String mSelectedGiftId;
private GiftNumberPopup mGiftNumberPopup;
private List<GiftGridAdapter> mAdapterList = new ArrayList<GiftGridAdapter>();
private GiftGiveClickListener mGiftGiveListener;
private Context mContext;
public GiftWidget(Context context) {
super(context);
if (context instanceof Activity) {
((Activity) context).getLayoutInflater()
.inflate(R.layout.widget_gift, this);
} else {
inflate(context, R.layout.widget_gift, this);
}
initView(context);
}
public GiftWidget(Context context, AttributeSet attrs) {
super(context, attrs);
if (context instanceof Activity) {
((Activity) context).getLayoutInflater()
.inflate(R.layout.widget_gift, this);
} else {
inflate(context, R.layout.widget_gift, this);
}
initView(context);
}
private void initView(Context context) {
this.mContext = context;
mViewPager = (ViewPager) findViewById(R.id.gift_vp_pager);
mGiveButton = (Button) findViewById(R.id.gift_bt_give);
mNumberView = findViewById(R.id.gift_ll_number);
mBalanceTextView = (TextView) findViewById(R.id.gift_tv_balance);
mNumberTextView = (TextView) findViewById(R.id.gift_tv_number);
mIndicatorView = (LinearLayout) findViewById(R.id.gift_ll_indicator);
pay = (TextView) findViewById(R.id.gift_tv_balance_cz);
mNumberView.setOnClickListener(this);
mGiveButton.setOnClickListener(this);
pay.setOnClickListener(this);
}
public void initGift(List<Gift> giftList) {
if (giftList == null) {
return;
}
mAdapterList.clear();
if (giftList.size() > 0 && mSelectedGiftId == null) { //默认选中第一个礼物
mSelectedGiftId = giftList.get(0).getId();
}
final List<View> views = new ArrayList<View>();
int start = 0;
while (start < giftList.size()) {
int count;
if (giftList.size() - start > GIFT_MAX_ITEM_SIZE) {
count = GIFT_MAX_ITEM_SIZE;
} else {
count = giftList.size() - start;
}
List<Gift> list = giftList.subList(start, start + count);
start = start + count;
views.add(getGridChildView(list));
}
initIndicator(views.size());
mViewPager.setAdapter(new GiftPagerAdapter(views));
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
switchIndicator(position);
//刷新旧的选中状态
if (mAdapterList.size() > position) {
GiftGridAdapter adapter = mAdapterList.get(position);
adapter.notifyDataSetChanged();
}
}
});
switchIndicator(0);
}
private void initIndicator(int count) {
mIndicatorView.removeAllViews();
for (int i = 0; i < count; i++) {
ImageView indicator = new ImageView(getContext());
indicator.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
indicator.setPadding(indicatorSpace, indicatorSpace, indicatorSpace, indicatorSpace);
indicator.setImageResource(R.drawable.icon_indicator);
mIndicatorView.addView(indicator);
}
}
private void switchIndicator(int position) {
for (int i = 0; i < mIndicatorView.getChildCount(); i++) {
((ImageView) mIndicatorView.getChildAt(i)).setSelected(i == position ? true : false);
}
}
private View getGridChildView(List<Gift> giftList) {
final GiftGridAdapter adapter = new GiftGridAdapter(getContext(), 0, giftList);
mAdapterList.add(adapter);
GridView gridView = (GridView) LayoutInflater.from(getContext()).inflate(R.layout.layout_gift_grid, null);
gridView.setAdapter(adapter);
gridView.setChoiceMode(GridView.CHOICE_MODE_SINGLE);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mSelectedGiftId = adapter.getItem(position).getId();
adapter.notifyDataSetChanged();
}
});
return gridView;
}
public class GiftPagerAdapter extends PagerAdapter {
private List<View> views;
public GiftPagerAdapter(List<View> views) {
this.views = views;
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
((ViewPager) container).addView(views.get(position));
return views.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView(views.get(position));
}
}
private class GiftGridAdapter extends ArrayAdapter<Gift> {
public GiftGridAdapter(Context context, int textViewResourceId, List<Gift> giftList) {
super(context, textViewResourceId, giftList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
if (getContext() instanceof Activity) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_gift, null);
} else {
convertView = View.inflate(getContext(), R.layout.item_gift, null);
}
holder = new ViewHolder();
holder.root = convertView.findViewById(R.id.gift_item_ll_root);
holder.imageView = (ImageView) convertView.findViewById(R.id.gift_item_iv_gift);
holder.nameTextView = (TextView) convertView.findViewById(R.id.gift_item_tv_name);
holder.priceTextView = (TextView) convertView.findViewById(R.id.gift_item_tv_price);
holder.line = convertView.findViewById(R.id.line);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (position > 4) {
holder.line.setVisibility(View.GONE);
} else {
holder.line.setVisibility(View.VISIBLE);
}
Gift gift = getItem(position);
try {
GiftHelper.getInstance().setPngDrawable(holder.imageView, gift);
holder.nameTextView.setText(gift.getName());
holder.priceTextView.setText(gift.getPrice());
} catch (Exception e) {
e.printStackTrace();
}
if (gift.getId().equals(mSelectedGiftId)) { //选中
holder.root.setSelected(true);
} else {
holder.root.setSelected(false);
}
return convertView;
}
private class ViewHolder {
View root;
View line;
ImageView imageView;
TextView nameTextView;
TextView priceTextView;
}
}
public void initGiftNumber(Activity activity) {
if (mGiftNumberPopup == null) {
mGiftNumberPopup = new GiftNumberPopup(activity);
mGiftNumberPopup.setNumberChangeListener(this);
}
//默认显示数量1
setGiftNumber(1);
}
private void showGiftNumber(View view) {
mGiftNumberPopup.showPopupWindow(view);
}
public void dismissGiftNumber() {
mGiftNumberPopup.dismiss();
}
public void setBalance(String text) {
mBalanceTextView.setText(text);
}
private void setGiftNumber(int number) {
mNumber = number;
mNumberTextView.setText(String.valueOf(number));
}
public void setGiveGift(OnClickListener listener) {
mGiveButton.setOnClickListener(listener);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.gift_bt_give:
if (mGiftGiveListener != null && mSelectedGiftId != null) {
mGiftGiveListener.onGiftGiveClick(Integer.parseInt(mSelectedGiftId), mNumber);
}
break;
case R.id.gift_ll_number:
showGiftNumber(v);
break;
case R.id.gift_tv_balance_cz:
RechargeActivity.startActivity(mContext);
mGiftGiveListener.dismiss();
break;
}
}
@Override
public void onGiftNumberChange(int number) {
setGiftNumber(number);
}
public void setOnGiftGiveClickListener(GiftGiveClickListener listener) {
mGiftGiveListener = listener;
}
public interface GiftGiveClickListener {
public void onGiftGiveClick(int giftId, int number);
public void dismiss();
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- 礼物控件layout -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:skin="http://schemas.android.com/android/skin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.giflist.view.AdjustHeightViewPager
android:id="@+id/gift_vp_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:flipInterval="300"
android:persistentDrawingCache="animation"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:orientation="vertical">
<LinearLayout
android:id="@+id/gift_ll_indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"/>
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_marginTop="7dp"
android:background="@color/line_list"
skin:enable="true"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp">
<TextView
android:id="@+id/gift_tv_balance_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:text="@string/gift_text_balance"
android:textColor="@color/text_content"
android:textSize="14sp"/>
<TextView
android:id="@+id/gift_tv_balance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:layout_toLeftOf="@+id/gift_tv_balance_cz"
android:layout_toRightOf="@+id/gift_tv_balance_label"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/text_content"
android:textSize="14sp"/>
<TextView
android:id="@+id/gift_tv_balance_cz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/top_margin"
android:layout_toLeftOf="@+id/gift_ll_number"
android:text="@string/recharge_title"
android:textColor="@color/skin_selector_text_color"
android:textSize="14sp"
skin:enable="true"/>
<LinearLayout
android:id="@+id/gift_ll_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:layout_marginRight="10dp"
android:layout_toLeftOf="@+id/gift_bt_give"
android:background="@drawable/button_gray_selector"
android:clickable="true"
android:gravity="right|center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/gift_tv_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/skin_selector_text_color"
android:textSize="14sp"
android:minWidth="50dp"
android:gravity="center"
android:text="1"
skin:enable="true"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:src="@drawable/video_present_number_point_skin_n"/>
</LinearLayout>
<Button
android:id="@+id/gift_bt_give"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/skin_button_orange_selector"
android:paddingBottom="10dp"
android:paddingLeft="25dp"
android:paddingRight="25dp"
android:paddingTop="10dp"
android:text="@string/gift_text_give"
android:textColor="@color/white"
skin:enable="true"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>