专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 图形/图像

旋转ImageView跟TextView的效果实现

发布时间:2011-06-27 20:27:49 文章来源:www.iduyao.cn 采编人员:星星草
旋转ImageView和TextView的效果实现


如图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);
        }        
        
}


Android中ViewGroup等容器控件的使用
http://blog.csdn.net/arui319/archive/2010/09/07/5868466.aspx
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: