码迷,mamicode.com
首页 > 移动开发 > 详细

android自定义view、viewgroup、复合组件(1)

时间:2015-11-16 17:45:32      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:

自定义红点的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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!