实现ImageView和TextView的旋转

public class IconViewGroup extends ViewGroup {
	TextView mTextView;
	ImageView mImageView;// 显示对应的icon
	private Context mContext;
	/**
	 * 命名区域
	 */
	private final String namespace = "http://com.oppo.examples";
	/**
	 * 保存创建旋转角度
	 */
	private float mRotateDegrees;
	/**
	 * 保存创建背景图片的ID
	 */
	private int mBackGroudDrawableId;
	/**
	 * 利用图片ID加载图片
	 */
	private Drawable mBackGroudDrawable;
	/**
	 * 原始图片所需宽、高
	 */
	private int mBackGroundWidth;
	private int mBackGroundHeight;
	private View view;

	private static final int ICON_WIDTH = 46;// 显示数字的TextView的长宽
	private static final int ICON_HEIGHT = 46;

	private static final int TEXT_WIDTH = 46;// 显示数字的TextView的长宽
	private static final int TEXT_HEIGHT = 260;

	public IconViewGroup(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public IconViewGroup(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
		mContext = context;
		mBackGroudDrawableId = attrs.getAttributeResourceValue(namespace,
				"background", R.drawable.item_on);
		mBackGroudDrawable = context.getResources().getDrawable(
				mBackGroudDrawableId);
		mRotateDegrees = attrs.getAttributeFloatValue(namespace,
				"rotateDegrees", 30.0f);
	}

	private void init(Context context) {
		// TODO Auto-generated method stub
		mTextView = new MyTextView(context);
		mTextView.setTextSize(28);
		mTextView.setGravity(Gravity.CENTER_VERTICAL);
		// mTextView.setBackgroundColor(0xFFFFFF00);
		mTextView.setText(R.string.app_name);
		mTextView.setTextColor(0xF0FFFFFF);
		mImageView = new ImageView(context);
		mImageView.setBackgroundResource(R.drawable.icon);
		this.addView(mTextView);
		this.addView(mImageView);
	}

	@Override
	protected void onLayout(boolean changed, int l, int t, int r, int b) {
		// TODO Auto-generated method stub
		int ivWidth = mImageView.getMeasuredWidth();
		int ivHeight = mImageView.getMeasuredHeight();
		int tvWidth = mTextView.getMeasuredWidth();
		int tvHeight = mTextView.getMeasuredHeight();
		mTextView.measure(r - l, b - t);
		mTextView.layout(5 + ivWidth + 10, getHeight() - tvHeight - 5,
				getWidth(), getHeight() - 5);
		mImageView.measure(r - l, b - t);
		mImageView.layout(5, 5 + getHeight() - ivHeight, ivWidth, getHeight());

	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		// TODO Auto-generated method stub
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
		/**
		 * 设定View显示区域
		 */
		mBackGroundHeight = mBackGroudDrawable.getIntrinsicHeight();
		mBackGroundWidth = mBackGroudDrawable.getIntrinsicWidth();
		if (mRotateDegrees == 90.0f) {
			setMeasuredDimension(mBackGroundHeight, mBackGroundWidth);
		} else {
			setMeasuredDimension(mBackGroundWidth, mBackGroundHeight);
		}
	}

	@Override
	protected void dispatchDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		canvas.rotate(mRotateDegrees);
		mBackGroudDrawable.setBounds(0, 0, mBackGroundWidth, mBackGroundHeight);
		mBackGroudDrawable.draw(canvas);
		super.dispatchDraw(canvas);
	}
}
暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心