自定义带图片按钮的实现。
2014-11-08 22:51
225 查看
首先,贴上效果图。
结构: 左边是图,右边是文字。
虽然这种可以用布局直接实现或者其他方式比如
。但是我认为做成自定义控件要比布局方便的多。需要什么效果,直接添加属性就行。
其次,实现。
自定义控件布局。
这里多了个txt_ding_addone 为id的TextView,是我加的+1 。 当点击后,会有个+1的动画,用的地方也比较多。
这里加了个自定义属性:
Java代码实现。
+1 动画
参考:http://www.2cto.com/kf/201211/171067.html
结构: 左边是图,右边是文字。
虽然这种可以用布局直接实现或者其他方式比如
。但是我认为做成自定义控件要比布局方便的多。需要什么效果,直接添加属性就行。
其次,实现。
自定义控件布局。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FFFFFF" android:orientation="vertical" > <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical|center_horizontal" > <ImageView android:id="@+id/operation_imgview" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <TextView android:id="@+id/operation_txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@id/operation_imgview" android:ellipsize="end" android:gravity="center_vertical|left" android:singleLine="true" android:textColor="#777777" android:textSize="15sp" /> </RelativeLayout> <TextView android:id="@+id/txt_ding_addone" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical|center_horizontal" android:gravity="center_vertical|center" android:singleLine="false" android:text="+1" android:textColor="#F02D2B" android:textSize="18sp" android:visibility="gone" /> </FrameLayout> </LinearLayout>
这里多了个txt_ding_addone 为id的TextView,是我加的+1 。 当点击后,会有个+1的动画,用的地方也比较多。
这里加了个自定义属性:
<declare-styleable name="CustomImageButton"> <attr name="background_resource" format="reference" /> </declare-styleable>
Java代码实现。
package com.qiubaiclient.customui; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.qiubaiclient.main.R; import com.qiubaiclient.utils.Common; /** * 自定义带图片按钮 * * @author xiangxm * */ public class CustomImageButton extends LinearLayout implements OnClickListener { public CustomImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub mContext = context; TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); initData(a); } private void initData(TypedArray a) { LayoutInflater.from(mContext).inflate(R.layout.cust_imagebutton_layout, this, true); operationImageView = (ImageView) findViewById(R.id.operation_imgview); operationTxtInfo = (TextView) findViewById(R.id.operation_txt); Drawable resDrawable = a .getDrawable(R.styleable.CustomImageButton_background_resource); a.recycle(); this.setBackgroundDrawable(resDrawable); // animation初始化 this.txtDingAddOne = (TextView) findViewById(R.id.txt_ding_addone); animation = AnimationUtils.loadAnimation(mContext, R.anim.ding_animation); animation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub if (txtDingAddOne.getVisibility() == View.VISIBLE) { txtDingAddOne.setVisibility(View.GONE); } } }); } /** * 左边图片 */ private ImageView operationImageView; /** * 右边文字 */ private TextView operationTxtInfo; private Context mContext; /** * +1动画 外部调用startDingAnimation()方法会添加动画。 * 也可以将onClick事件注册到本地,外部调用直接用回调IOnClickCallBack的方式。 */ private Animation animation; /** * +1数字 */ private TextView txtDingAddOne; public CustomImageButton(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub mContext = context; TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView); initData(a); } public CustomImageButton(Context context) { super(context); // TODO Auto-generated constructor stub } /** * 设置文字信息 * * @param infoStr * 字符串资源 */ public void setOperationInfo(String infoStr) { if (null != this.operationTxtInfo) { this.operationTxtInfo.setText(infoStr); } } /** * 设置文字 * * @param infoRs * 文字资源id */ public void setOperationInfo(int infoRs) { if (null != this.operationTxtInfo) { Resources rs = mContext.getResources(); this.operationTxtInfo.setText(rs.getString(infoRs)); } } /** * 获取当前控件显示的文字信息 * * @return */ public String getOperationInfo() { if (null != operationTxtInfo) { return this.operationTxtInfo.getText().toString(); } return ""; } /** * 设置字体颜色 * * @param color * 颜色资源id */ public void setOptTextColor(int color) { if (null != this.operationTxtInfo) { this.operationTxtInfo.setTextColor(color); } } /** * 十六进制颜色字符串 * * @param colorStr */ public void setOptTextColor(String colorStr) { if (null != this.operationTxtInfo) { this.operationTxtInfo.setTextColor(Color.parseColor(colorStr)); } } /** * 设置图片资源 * * @param bitmap * 图片bitmap对象 */ public void setImageResource(Bitmap bitmap) { if (null == bitmap) { return; } if (null != this.operationImageView) { this.operationImageView.setImageBitmap(bitmap); } } /** * 设置图片 * * @param drawable * 图片drawble对象 */ public void setImageResource(Drawable drawable) { if (null == drawable) { return; } if (null != this.operationImageView) { Bitmap bitmap = Common.drawableToBitmap(drawable); this.operationImageView.setImageBitmap(bitmap); } } /** * 用户赞的动作 */ public static final int ACTION_UP = 0; /** * 用户踩的动作 */ public static final int ACTION_DOWN = 1; /** * 根据action来判断是赞还是不赞 * * @param action * 动作 */ public void startDingAnimation(int action) { if (action == ACTION_UP) { txtDingAddOne.setText("+1"); } else { txtDingAddOne.setText("-1"); } if (null != this.txtDingAddOne) { if (this.txtDingAddOne.getVisibility() == View.GONE || this.txtDingAddOne.getVisibility() == View.INVISIBLE) { this.txtDingAddOne.setVisibility(View.VISIBLE); this.txtDingAddOne.startAnimation(animation); } } } public IOnClickCallBack onClickCallBack; public void setOnClickCallBack(IOnClickCallBack onClickCallBack) { this.onClickCallBack = onClickCallBack; } /** * 点击事件回调 * * @author xiangxm * */ public interface IOnClickCallBack { /** * 点击事件监听 */ void mOnClick(); } @Override public void onClick(View v) { // TODO Auto-generated method stub //外部直接回调 if (this.onClickCallBack != null) { this.startAnimation(animation); onClickCallBack.mOnClick(); } } }
+1 动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!-- +1点赞动画 --> <translate android:duration="1000" android:fromXDelta="0" android:fromYDelta="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:toXDelta="0" android:toYDelta="-50" /> <alpha android:duration="1000" android:fromAlpha="1.0" android:toAlpha="0.3" /> </set>
参考:http://www.2cto.com/kf/201211/171067.html
相关文章推荐
- SWT开发--自定义图片按钮的实现
- 自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
- 自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
- android自定义按钮示例(重写imagebutton控件实现图片按钮)
- Android 自定义 HorizontalScrollView 实现图片左右滚动按钮控制
- 自定义上传图片按钮 实现图片的预览和切换
- TabHosts导航按钮实现自定义图片和文字
- android实现自定义图片+文字按钮
- IOS 初学 runtime 自定义Button实现按钮图片在上文字在下
- IOS】自定义UIAlertView样式,实现可替换背景和按钮 此博文包含图片此博文包含视频 (2012-10-24 10:23:25)
- HTML自定义按钮上传图片并实现预览(同时解决getAsDataURL()弃用问题)
- IOS 开发之自定义按钮实现文字图片位置随意定制
- 用ajax实现带标题,图片和自定义按钮的删除确认对话框
- 自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
- 安卓自定义带图片按钮的实现
- 自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
- Qt实现透明无边框,无关闭按钮,带自定义图片的窗体实例代码
- Swing 实现简单的自定义不规则按钮组件2
- 使用MYSQL、PHP和FLEX实现上传图片,动态在DataGrid中添加下载按钮和上传的图片.
- swing 实现自定义可变颜色的自定义按钮