
如圖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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
