自定义带图片按钮的实现。
来源:互联网 发布:家里网络接线盒没连 编辑:程序博客网 时间:2024/04/30 13:23
首先,贴上效果图。
结构: 左边是图,右边是文字。
虽然这种可以用布局直接实现或者其他方式比如
。但是我认为做成自定义控件要比布局方便的多。需要什么效果,直接添加属性就行。
其次,实现。
自定义控件布局。
<?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 stubmContext = 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() {@Overridepublic void onAnimationStart(Animation arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animation arg0) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation arg0) {// TODO Auto-generated method stubif (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 stubmContext = 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();}@Overridepublic 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
0 0
- 自定义带图片按钮的实现。
- 自定义Android带图片的按钮
- 自定义Android带图片的按钮
- 自定义Android带图片的按钮
- 自定义Android带图片的按钮
- 用ajax实现带标题,图片和自定义按钮的删除确认对话框
- VC自定义图片按钮控件的实现
- SWT开发--自定义图片按钮的实现
- VC自定义图片按钮控件的实现
- 自定义带图片的ListView的实现
- iOS tableviewcell左划自定义(带图片)删除按钮,点击任意地方取消删除的巧妙实现方法
- 自定义上传图片按钮 实现图片的预览和切换
- 自定义带颜色的按钮
- 第四篇:自定义带图片的ListView的实现(一)
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- Android实现自定义带文字和图片的Button
- warning: deprecated conversion from string constant to "char *"
- Objective-C 使用点语法调用getters和setters
- asp.net mvc中的MVC彼此关联性
- Unable to execute dex: java.nio.BufferOverflowException.解决办法
- jQuery学习笔记3----ajax基础
- 自定义带图片按钮的实现。
- LeetCode OJ 之 Length of Last Word(求最后一个单词的长度)
- 第11周项目6-回文、素数-回文数
- 负值之美:负margin在页面布局中的应用
- 和为n连续正数序列 【微软面试100题 第五十一题】
- 类的成员函数的指针
- C#中的特性 和 通过反射获取属性上的特性
- 学习总结与未来规划
- Native code library failed to load: ensure the appropriate library (opl124.dll/.so) is in your path.