标签:
自定义红点的imageview
RedTipImageView.java
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.youapp.app.R;
/**
* Created by moziqi on 2015/11/12.
* 小红点
*/
public class RedTipImageView extends ImageView implements GeneralView {
private int tipVisibility = 0;
private TipType mTipType = TipType.RED_TIP_INVISIBLE;
public RedTipImageView(Context context) {
this(context, null, 0);
}
public RedTipImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public RedTipImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
@Override
public void init(Context context) {
}
/**
* 利用配置文件操作
*
* @param context
* @param attrs
*/
@Override
public void init(Context context, AttributeSet attrs) {
if (attrs != null) {
TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.RedTipImageView);
tipVisibility = typedArray.getInt(R.styleable.RedTipImageView_redTipsVisibility, 0);
typedArray.recycle();
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (tipVisibility == TipType.RED_TIP_VISIBLE.getCode() || mTipType == TipType.RED_TIP_VISIBLE) {
int width = getWidth();
int y = 10;
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setAntiAlias(false);
paint.setDither(true);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
canvas.drawCircle(width - y, y, y / 2, paint);
}
}
public void setTipVisibility(int visibility) {
tipVisibility = visibility;
invalidate();
}
public void setTipVisibility(TipType tipType) {
if (tipType == null) {
throw new NullPointerException();
}
this.mTipType = tipType;
invalidate();
}
/**
* 红点类型
*/
public enum TipType {
RED_TIP_INVISIBLE(0),//不显示
RED_TIP_VISIBLE(1),//显示
RED_TIP_GONE(2);//不显示
private int code;
TipType(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}
}
attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="RedTipImageView"> <attr name="redTipsVisibility"> <enum name="invisible" value="0"></enum> <enum name="visible" value="1"></enum> <enum name="gone" value="2"></enum> </attr> </declare-styleable> </resources>
定义底部的item复合组件
BottomItemView.java
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.youapp.app.R;
/**
* Created by moziqi on 2015/11/12.
* 定义底部菜单item
*/
public class BottomItemView extends LinearLayout implements GeneralView {
private Context mContext;
private RedTipImageView mRedTipImageView;
private TextView mTextView;
//判断当前是否有焦点
private boolean isFocusable = false;
public BottomItemView(Context context) {
this(context, null, 0);
}
public BottomItemView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BottomItemView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//2个init都可以使用,看个人喜欢
init(context, attrs);
//图片自适应拉伸
mRedTipImageView.setScaleType(ImageView.ScaleType.FIT_XY);
//取消事件触发
mRedTipImageView.setFocusable(false);
}
/**
* 使用xml配置文件
*
* @param context
*/
@Override
public void init(Context context) {
mContext = context;
LayoutInflater mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rootView = mLayoutInflater.inflate(R.layout.view_bottom_item, this);
mRedTipImageView = (RedTipImageView) rootView.findViewById(R.id.iv_view_bottom_item);
mTextView = (TextView) rootView.findViewById(R.id.tv_view_bottom_item);
}
/**
* 纯代码实现
*
* @param context
* @param attrs
*/
@Override
public void init(Context context, AttributeSet attrs) {
mContext = context;
setOrientation(VERTICAL);
mRedTipImageView = new RedTipImageView(mContext, attrs);
mTextView = new TextView(mContext);
LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.gravity = Gravity.CENTER;
addView(mRedTipImageView, layoutParams);
addView(mTextView, layoutParams);
}
public void setIsFocusable(boolean isFocusable) {
this.isFocusable = isFocusable;
}
public void setIcon(Drawable focusableDrawable, Drawable unFocusableDrawable) {
if (isFocusable) {
setIcon(focusableDrawable);
} else {
setIcon(unFocusableDrawable);
}
}
public void setIcon(int focusableResId, int unFocusableResIdm) {
if (isFocusable) {
setIcon(focusableResId);
} else {
setIcon(unFocusableResIdm);
}
}
public void setIcon(Bitmap focusableBitmap, Bitmap unFocusableBitmap) {
if (isFocusable) {
setIcon(focusableBitmap);
} else {
setIcon(unFocusableBitmap);
}
}
public void setIcon(Drawable drawable) {
mRedTipImageView.setImageDrawable(drawable);
}
public void setIcon(int resId) {
mRedTipImageView.setImageResource(resId);
}
public void setIcon(Bitmap bitmap) {
mRedTipImageView.setImageBitmap(bitmap);
}
/**
* 设置红点提示
*
* @param tipType
*/
public void setTipVisibility(RedTipImageView.TipType tipType) {
mRedTipImageView.setTipVisibility(tipType);
}
public void setText(String text) {
mTextView.setText(text);
}
public void setText(int resId) {
mTextView.setText(resId);
}
}
view_bottom_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <com.zhuoheng.chaecha.ui.RedTipImageView android:id="@+id/iv_view_bottom_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <TextView android:id="@+id/tv_view_bottom_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </LinearLayout>
android自定义view、viewgroup、复合组件(1)
标签:
原文地址:http://my.oschina.net/moziqi/blog/530998