首页 > 其他分享 >旋转ImageView和TextView的效果实现

旋转ImageView和TextView的效果实现

时间:2023-05-01 14:08:08浏览次数:42  
标签:mTextView int mBackGroudDrawable private 旋转 context ImageView mImageView TextVie


如图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等容器控件的使用

  • 旋转ImageView和TextView的效果实现_ide

  • 大小: 4.1 KB
  • 查看图片附件

标签:mTextView,int,mBackGroudDrawable,private,旋转,context,ImageView,mImageView,TextVie
From: https://blog.51cto.com/u_5454003/6238860

相关文章

  • 旋转游戏
    题目描述pipi和lili各带来一个正多边形卡片。pipi的卡片是边长为\(A\)的正\(M\)边形,lili的卡片是边长为\(B\)的正\(N\)边形。pipi和lili将两张卡片摆放在一起,其中两张卡片并不重叠,并且有至少一个公共顶点和一条公共边。pipi喜欢旋转,因此她沿lili的卡片顺时......
  • android TextView属性大全
    android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。android:bufferType指定get......
  • matlab设置坐标轴颜色以及标签换行显示、旋转显示
    set(gca,'ycolor',[000]);%颜色%设置不同字体、字型、以及换行显示,换行显示用{}包住每行字即可yr=ylabel('\it\fontname{TimesNewRoman}y_{CS}^{M4}...\rm\fontname{TimesNewRoman}\cdot{10}');%旋转跳跃set(yr,'Rotation',0,'position',[5.71100]......
  • 点云数据旋转
    点云数据旋转 #include<iostream>#include<pcl/io/pcd_io.h>#include<pcl/point_types.h>#include<pcl/filters/passthrough.h>#include<pcl/visualization/pcl_visualizer.h>intmain(intargc,char**argv){p......
  • 【二分查找】LeetCode 153. 寻找旋转排序数组中的最小值
    题目链接153.寻找旋转排序数组中的最小值思路首先分析一下旋转数组可能有的状态:左<中<右,此时最小值肯定在左边,应当收缩右边界左<中,中>右,此时最小值肯定在右半段,应当收缩左边界左>中,中<右,此时最小值肯定在左半段,应当收缩右边界分析这三种状态可以发现,中值小......
  • 位图旋转
    今天有关Android游戏开发的基础,我们说下Bitmap相关的实用操作,这里我们就说下位图旋转。在Android中图形的旋转和变化提供了方便的矩阵Maxtrix类,Maxtrix类的setRotate方法接受图形的变换角度和缩放,最终Bitmap类的createBitmap方法中其中的重载函数,可以接受Maxtrix对象,方法原型如下......
  • 矩阵旋转,仿射变换
    importnumpyasnpimportmathasmdefRx(theta):returnnp.matrix([[1,0,0],[0,m.cos(theta),-m.sin(theta)],[0,m.sin(theta),m.cos(theta)]])defRy(theta):returnnp.matrix([[......
  • 视频直播源码,android动画小飞机旋转效果
    视频直播源码,android动画小飞机旋转效果 //小飞机旋转动效果publicclassPlaneViewextendsView{  privatePaintpaint;  privateintwidth;  privateintheight;  privatefloatcurLength;  privatefloatallLength;  privatefloatmAnimato......
  • 4月23日温度旋转按钮
    TempControlViewpackagecom.example.zhineng;importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Matrix;importand......
  • 八、旋转数组
    给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例1:输入:[1,2,3,4,5,6,7]和k=3输出:[5,6,7,1,2,3,4]解释:向右旋转1步:[7,1,2,3,4,5,6]向右旋转2步:[6,7,1,2,3,4,5]向右旋转3步:[5,6,7,1,2,3,4]示例 2:输入:[-1,-100,3,99]和k......