public class NumberAddSubView extends LinearLayout {
private View mView;
private ImageButton mIvLeft;
private TextView mTextView;
private ImageButton mIvRight;
private String mLeftText;
private int mNumber;
private int mImgDis;
private int mTvDis;
private static final int SHOW = 0;
private static final int HIND = 1;
private boolean mOpenAmi;
private boolean isOverAmi = true;
private Drawable mRightImageSrc;
private Drawable mRightNormalImageSrc;
public NumberAddSubView(Context context) {
this(context,null);
}
public NumberAddSubView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public NumberAddSubView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mView = View.inflate(context, R.layout.view_numberaddsub,this);
mIvLeft = (ImageButton) findViewById(R.id.iv_left);
mTextView = (TextView) findViewById(R.id.tv);
mIvRight = (ImageButton) findViewById(R.id.iv_right);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.NumberAddSubView);
//文字
mLeftText = array.getString(R.styleable.NumberAddSubView_Text);
//颜色
int leftColor = array.getColor(R.styleable.NumberAddSubView_TextColor,getResources().getColor(R.color.app_black));
//大小
float leftSize = array.getDimensionPixelSize(R.styleable.NumberAddSubView_TextSize,9);
//间距
float marginLeft = array.getDimensionPixelSize(R.styleable.NumberAddSubView_marginLeft,9);
float marginRight = array.getDimensionPixelSize(R.styleable.NumberAddSubView_marginRight,9);
//左侧图片
final Drawable LeftImageSrc = array.getDrawable(R.styleable.NumberAddSubView_LeftImageSrc);
mRightImageSrc = array.getDrawable(R.styleable.NumberAddSubView_RightImageSrc);
mRightNormalImageSrc = array.getDrawable(R.styleable.NumberAddSubView_RightNormalImageSrc);
mOpenAmi = array.getBoolean(R.styleable.NumberAddSubView_openAmi,false);
if (LeftImageSrc != null){
mIvLeft.setImageDrawable(LeftImageSrc);
}
if (mRightImageSrc != null){
mIvRight.setImageDrawable(mRightImageSrc);
}
mTextView.setText(mLeftText);
mTextView.setTextColor(leftColor);
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,leftSize);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);//定义一个LayoutParams
layoutParams.setMargins((int)marginLeft,0,(int)marginRight,0);
mTextView.setLayoutParams(layoutParams);
array.recycle();
mNumber = Integer.parseInt(mLeftText);
setLeftEnable(mNumber);
initListener();
if (mNumber < 1 && mOpenAmi){
mIvLeft.setAlpha(0.0f);
mTextView.setAlpha(0.0f);
if (mRightNormalImageSrc != null){
mIvRight.setImageDrawable(mRightNormalImageSrc);
}
}
}
private void setLeftEnable(int i) {
if (i < 1){
mIvLeft.setEnabled(false);
}else {
mIvLeft.setEnabled(true);
}
}
private void initListener() {
mIvLeft.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!isOverAmi){
return;
}
if (mNumber < 1){
return;
}
mNumber--;
mTextView.setText(mNumber+"");
setLeftEnable(mNumber);
if (mNumber == 0 && mOpenAmi){
getDis();
startAmi(mIvLeft, mImgDis, HIND);
startAmi(mTextView, mTvDis, HIND);
if (mRightNormalImageSrc != null)
mIvRight.setImageDrawable(mRightNormalImageSrc);
}
}
});
mIvRight.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!isOverAmi){
return;
}
mNumber++;
mTextView.setText(mNumber+"");
setLeftEnable(mNumber);
if (1 == mNumber && mOpenAmi) {
getDis();
startAmi(mIvLeft, mImgDis, SHOW);
startAmi(mTextView, mTvDis, SHOW);
if (mRightImageSrc != null)
mIvRight.setImageDrawable(mRightImageSrc);
}
}
});
}
/**
*
* @param startView
* @param dis
* @param type 是正转还是反转
*/
private void startAmi(final View startView,int dis,final int type) {
Logutils.e("--距离--","dis:"+dis);
ObjectAnimator objectAnimator1= null;
if (SHOW == type){
objectAnimator1= ObjectAnimator.ofFloat(startView, "alpha", 0.0f, 1.0f);//透明
} else {
objectAnimator1= ObjectAnimator.ofFloat(startView, "alpha", 1.0f, 0.0f);//透明
}
ObjectAnimator objectAnimator2= null;
if (SHOW == type){
objectAnimator2= ObjectAnimator.ofFloat(startView, "rotation", 0,360);//旋转
} else {
objectAnimator2= ObjectAnimator.ofFloat(startView, "rotation", 360,0);//旋转
}
ObjectAnimator objectAnimator3= null;
if (SHOW == type){
objectAnimator3= ObjectAnimator.ofFloat(startView, "translationX", dis, 0);//平移
} else {
objectAnimator3= ObjectAnimator.ofFloat(startView, "translationX", 0f, dis);//平移
}
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(400);
animatorSet.setInterpolator(new LinearInterpolator());
animatorSet.playTogether(objectAnimator1, objectAnimator2, objectAnimator3); //三个动画同时执行
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Logutils.e("-----","开始动画");
isOverAmi = false;
}
@Override
public void onAnimationEnd(Animator animation) {
Logutils.e("-----","结束动画");
isOverAmi = true;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animatorSet.start();
}
/**
* 获取距离,只获取一次
*/
private void getDis() {
if (mImgDis == 0 || mTvDis == 0) {
int[] start_location = new int[2];
mIvLeft.getLocationInWindow(start_location);
int[] start_location_tv = new int[2];
mTextView.getLocationInWindow(start_location_tv);
int[] end_location = new int[2];
mIvRight.getLocationInWindow(end_location);
mImgDis = end_location[0] - start_location[0];
mTvDis = end_location[0] - start_location_tv[0];
}
}
/**
* 设置文字
* @param s
*/
public void setText(String s){
mTextView.setText(s);
}
}
<declare-styleable name="NumberAddSubView">
<attr name="Text" format="string" />
<attr name="TextSize" format="dimension" />
<attr name="TextColor" format="color" />
<attr name="LeftImageSrc" format="integer" />
<attr name="RightImageSrc" format="integer" />
<attr name="RightNormalImageSrc" format="integer" />
<attr name="marginRight" format="dimension" />
<attr name="marginLeft" format="dimension" />
<attr name="openAmi" format="boolean" />
</declare-styleable>
<com.iwith.smart.iwith_control.view.NumberAddSubView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="10dp"
app:Text="0"
app:TextColor="#333"
app:TextSize="17sp"
app:LeftImageSrc="@mipmap/icon_menu_sub"
app:RightImageSrc="@mipmap/icon_menu_add"
app:RightNormalImageSrc="@mipmap/icon_menu_add_normal"
app:marginLeft="10dp"
app:marginRight="10dp"
app:openAmi="true"
>
</com.iwith.smart.iwith_control.view.NumberAddSubView>