Android 3d cloud tag

Source: Internet
Author: User
Tags comparable gety

Android 3d cloud tag

1. Custom View

Public class TagCloudView extends RelativeLayout {RelativeLayout navigation_bar; TextView mTextView1; private final float TOUCH_SCALE_FACTOR =. 8f; private float tspeed; private TagCloud mTagCloud; private float mAngleX = 0; private float mAngleY = 0; private float centerX, centerY; private float radius; private Context mContext; private List
 
  
MTextView; private List
  
   
MParams; private int shiftLeft; float dowx = 0; float dowy = 0; float cutx = 100; float cuty = 100; public TagCloudView (Context mContext, int width, int height, List
   
    
TagList) {this (mContext, width, height, tagList, 6, 34, 1);} public TagCloudView (Context mContext, int width, int height, List
    
     
TagList, int textSizeMin, int textSizeMax, int scrollSpeed) {super (mContext); this. mContext = mContext; tspeed = scrollSpeed; centerX = width/2; centerY = height/2; radius = Math. min (centerX * 0.95f, centerY * 0.95f); shiftLeft = (int) (Math. min (centerX * 0.15f, centerY * 0.15f); mTagCloud = new TagCloud (tagList, (int) radius, textSizeMin, textSizeMax); float [] tempColor1 = {0.9412f, 0.7686f, 0.2f, 1}; // rgb Alpha // {1f, 0f, 0f, 1} red {0.3882f, 0.21568f, 0.0f, 1} orange // {0.9412f, 0.7686f, 0.2f, 1} light orangefloat [] tempColor2 = {1f, 0f, 0f, 1}; // rgb Alpha // {0f, 0f, 1f, 1} blue {0.1294f, 0.1294f, 0.1294f, 1} gray // {0.9412f, 0.7686f, 0.2f, 1} light orangemTagCloud. setTagColor1 (tempColor1); // higher colormTagCloud. setTagColor2 (tempColor2); // lower colormTagCloud. setRadius (int) radius); mTagCloud. create (true); mTagCloud. setAngleX (mAngleX); mTagCloud. setAngleY (mAngleY); mTagCloud. update (); mTextView = new ArrayList
     
      
(); MParams = new ArrayList
      
        (); Iterator
       It = mTagCloud. iterator (); Tag tempTag; int I = 0; // extract each data and put it in the TexView while (it. hasNext () {tempTag = (Tag) it. next (); tempTag. setParamNo (I); mTextView. add (new TextView (this. mContext); mTextView. get (I ). setText (tempTag. getText (); mParams. add (new RelativeLayout. layoutParams (LayoutParams. WRAP_CONTENT, LayoutParams. WRAP_CONTENT); mParams. get (I ). addRule (RelativeLayout. ALIGN_PARENT_LEFT); mParams. get (I ). addRule (RelativeLayout. ALIGN_PARENT_TOP); mParams. get (I ). setMargins (int) (centerX-shiftLeft + tempTag. getLoc2DX (), (int) (centerY + tempTag. getLoc2DY (), 0, 0); mTextView. get (I ). setLayoutParams (mParams. get (I); mTextView. get (I ). setSingleLine (true); int mergedColor = Color. argb (int) (tempTag. getAlpha () * 255), (int) (tempTag. getColorR () * 255), (int) (tempTag. getColorG () * 255), (int) (tempTag. getColorB () * 255); mTextView. get (I ). setTextColor (mergedColor); mTextView. get (I ). setTextSize (int) (tempTag. getTextSize () * tempTag. getScale (); addView (mTextView. get (I); mTextView. get (I ). setOnClickListener (OnTagClickListener (tempTag. getUrl (); // set each TexView to have its own position as the tag, so that mTextView can be operated later. get (I ). setTag (I); I ++;}/** used for automatic playback */new Timer (). schedule (new TimerTask () {@ Overridepublic void run () {handler. sendEmptyMessage (1); }}, 0,200) ;}@ SuppressLint ("HandlerLeak") Handler handler = new Handler () {@ Overridepublic void handleMessage (Message msg) {super. handleMessage (msg); mAngleX = (cuty/radius) * tspeed * TOUCH_SCALE_FACTOR; mAngleY = (-cutx/radius) * tspeed * TOUCH_SCALE_FACTOR; changPosition ();}}; @ Overrideprotected void onDraw (Canvas canvas) {super. onDraw (canvas);}/*** trigger event */@ Overridepublic boolean onTouchEvent (MotionEvent e) {switch (e. getAction () {case MotionEvent. ACTION_DOWN: dowx = e. getX (); dowy = e. getY (); break; case MotionEvent. ACTION_UP: float upx = e. getX (); float upy = e. getY (); cutx = upx-dowx; cuty = upy-dowy; break; case MotionEvent. ACTION_MOVE: mAngleX = (cuty/radius) * tspeed * TOUCH_SCALE_FACTOR; mAngleY = (-cutx/radius) * tspeed * TOUCH_SCALE_FACTOR; changPosition (); break;} return true ;} /*** change location */private void changPosition () {mTagCloud. setAngleX (mAngleX); mTagCloud. setAngleY (mAngleY); mTagCloud. update (); Iterator
       It = mTagCloud. iterator (); Tag tempTag; while (it. hasNext () {tempTag = (Tag) it. next (); mParams. get (tempTag. getParamNo ()). setMargins (int) (centerX-shiftLeft + tempTag. getLoc2DX (), (int) (centerY + tempTag. getLoc2DY (), 0, 0); mTextView. get (tempTag. getParamNo ()). setTextSize (int) (tempTag. getTextSize () * tempTag. getScale (); int mergedColor = Color. argb (int) (tempTag. getAlpha () * 255), (int) (tempTag. getColorR () * 255), (int) (tempTag. getColorG () * 255), (int) (tempTag. getColorB () * 255); mTextView. get (tempTag. getParamNo ()). setTextColor (mergedColor); mTextView. get (tempTag. getParamNo ()). bringToFront () ;}}/*** Click Event * @ param url * @ return */View. onClickListener OnTagClickListener (final String url) {return new View. onClickListener () {@ Overridepublic void onClick (View v ){}};}}
      
     
    
   
  
 


Ii. Custom iterator


/*** Custom iterator * @ author Administrator **/public class TagCloud implements Iterable{Private List
  
   
TagCloud; private int radius; private static final int DEFAULT_RADIUS = 3; private static final int TEXT_SIZE_MAX = 30, TEXT_SIZE_MIN = 4; private static final float [] DEFAULT_COLOR1 = {0.886f, 0.725f, 0.188f, 1f}; private static final float [] DEFAULT_COLOR2 = {0.3f, 0.3f, 0.3f, 1f}; private float [] tagColor1; private float [] tagColor2; private int textSizeMax, private float charts, cos_mAngleX, sin_mAngleY, cos_mAngleY, sin_mAngleZ, cos_mAngleZ; private float mAngleZ = 0; private float mAngleX = 0; private float mAngleY = 0; private int size = 0; private int smallest, largest; private boolean distrEven = true; public TagCloud () {this (new ArrayList
   
    
();} Public TagCloud (List
    
     
Tags) {this (tags, DEFAULT_RADIUS);} public TagCloud (List
     
      
Tags, int radius) {this (tags, radius, DEFAULT_COLOR1, DEFAULT_COLOR2, TEXT_SIZE_MIN, TEXT_SIZE_MAX);} public TagCloud (List
      
        Tags, int radius, int textSizeMin, int textSizeMax) {this (tags, radius, DEFAULT_COLOR1, DEFAULT_COLOR2, textSizeMin, textSizeMax);} public TagCloud (List
       
         Tags, int radius, float [] tagColor1, float [] tagColor2) {this (tags, radius, tagColor1, tagColor2, TEXT_SIZE_MIN, TEXT_SIZE_MAX);} public TagCloud (List
        
          Tags, int radius, float [] tagColor1, float [] tagColor2, int textSizeMin, int textSizeMax) {this. tagCloud = tags; this. radius = radius; this. tagColor1 = tagColor1; this. tagColor2 = tagColor2; this. textSizeMax = textSizeMax; this. textSizeMin = textSizeMin;}/*** override method */@ Overridepublic Iterator iterator () {return tagCloud. iterator ();}/*** create * @ param distrEven */public void create (boolean distrEven) {this. d IstrEven = distrEven; positionAll (distrEven); sineCosine (mAngleX, mAngleY, mAngleZ); updateAll (); smallest = 9999; largest = 0; for (int I = 0; I <tagCloud. size (); I ++) {int j = tagCloud. get (I ). getPopularity (); largest = Math. max (largest, j); smallest = Math. min (smallest, j) ;}tag tempTag; for (int I = 0; I <tagCloud. size (); I ++) {tempTag = tagCloud. get (I); int j = tempTag. getPopularity (); float percentage = (smal Lest = largest )? 1.0f: (float) j-smallest)/(float) largest-smallest); float [] tempColor = getColorFromGradient (percentage); // (rgb Alpha) int tempTextSize = getTextSizeGradient (percentage); tempTag. setColorR (tempColor [0]); tempTag. setColorG (tempColor [1]); tempTag. setColorB (tempColor [2]); tempTag. setTextSize (tempTextSize);} this. size = tagCloud. size ();}/*** after creation, update */public void update () {if (Math. abs (mAngleX)>. 1 | Math. abs (mAngleY)>. 1) {sineCosine (mAngleX, mAngleY, mAngleZ); updateAll () ;}/ *** calculate the @ param distrEven of each Tag Based on the word to true, otherwise, the word */private void positionAll (boolean distrEven) {double phi = 0; double theta = 0; int max = tagCloud. size (); for (int I = 1; I
         
           0) return color [0]; elsereturn 0;} public float getGvalue (float [] color) {if (color. length> 0) return color [1]; elsereturn 0;} public float getBvalue (float [] color) {if (color. length> 0) return color [2]; elsereturn 0;} public float getAlphaValue (float [] color) {if (color. length> = 4) return color [3]; elsereturn 0;} public float getAngleX () {return mAngleX;} public void setAngleX (float mAngleX) {this. mAngleX = mAngleX;} public float getAngleY () {return mAngleY;} public void setAngleY (float mAngleY) {this. mAngleY = mAngleY;} public int getSize () {return size ;}}
          


Iii. Custom Data

/*** The Comparable interface can customize the sorting method * @ author Administrator **/public class Tag implements Comparable
           
            
{Private String text, url; private int popularity; private int textSize; private float locX, locY, locZ; private float loc2DX, loc2DY; private float scale; private float colorR, colorG, colorB, alpha; private static final int DEFAULT_POPULARITY = 1; private int paramNo; public Tag (String text, int popularity) {this (text, 0f, 0f, 0f, 1.0f, popularity, "");} public Tag (String text, int popularity, String url) {this (text, 0f, 0f, 0f, 1.0f, popularity, url );} public Tag (String text, float locX, float locY, float locZ) {this (text, locX, locY, locZ, 1.0f, DEFAULT_POPULARITY ,"");} public Tag (String text, float locX, float locY, float locZ, float scale) {this (text, locX, locY, locZ, scale, DEFAULT_POPULARITY ,"");} public Tag (String text, float locX, float locY, float locZ, float scale, int popularity, String url) {this. text = text; this. locX = locX; this. locY = locY; this. locZ = locZ; this. loc2DX = 0; this. loc2DY = 0; this. colorR = 0.5f; this. colorG = 0.5f; this. colorB = 0.5f; this. alpha = 1.0f; this. scale = scale; this. popularity = popularity; this. url = url;} @ Overridepublic int compareTo (Tag another) {// return (int) (another. locZ-locZ);} public float getLocX () {return locX;} public void setLocX (float locX) {this. locX = locX;} public float getLocY () {return locY;} public void setLocY (float locY) {this. locY = locY;} public float getLocZ () {return locZ;} public void setLocZ (float locZ) {this. locZ = locZ;} public float getScale () {return scale;} public void setScale (float scale) {this. scale = scale;} public String getText () {return text;} public void setText (String text) {this. text = text;} public float getColorR () {return colorR;} public void setColorR (float colorR) {this. colorR = colorR;} public float getColorG () {return colorG;} public void setColorG (float colorG) {this. colorG = colorG;} public float getColorB () {return colorB;} public void setColorB (float colorB) {this. colorB = colorB;} public float getAlpha () {return alpha;} public void setAlpha (float alpha) {this. alpha = alpha;} public int getPopularity () {return popularity;} public void setPopularity (int popularity) {this. popularity = popularity;} public int getTextSize () {return textSize;} public void setTextSize (int textSize) {this. textSize = textSize;} public float getLoc2DX () {return loc2DX;} public void setLoc2DX (float loc2dx) {loc2DX = loc2dx;} public float getLoc2DY () {return loc2DY ;} public void setLoc2DY (float loc2dy) {loc2DY = loc2dy;} public int getParamNo () {return paramNo;} public void setParamNo (int paramNo) {this. paramNo = paramNo;} public String getUrl () {return url;} public void setUrl (String url) {this. url = url ;}}
           

Iv. Call


private TagCloudView mTagCloudView;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);Display display = getWindowManager().getDefaultDisplay(); @SuppressWarnings("deprecation")int width = display.getWidth();@SuppressWarnings("deprecation")int height = display.getHeight();List
           
             myTagList= createTags();mTagCloudView = new TagCloudView(this, width, height, myTagList ); setContentView(mTagCloudView);mTagCloudView.requestFocus();mTagCloudView.setFocusableInTouchMode(true);}private List
            
              createTags(){List
             
               tempList = new ArrayList
              
               ();tempList.add(new Tag("Google", 7, "http://www.google.com"));  tempList.add(new Tag("Yahoo", 3, "www.yahoo.com"));tempList.add(new Tag("CNN", 4, "www.cnn.com"));tempList.add(new Tag("MSNBC", 5, "www.msnbc.com"));tempList.add(new Tag("CNBC", 5, "www.CNBC.com"));tempList.add(new Tag("Facebook", 7, "www.facebook.com"));tempList.add(new Tag("Youtube", 3, "www.youtube.com"));tempList.add(new Tag("BlogSpot", 5, "www.blogspot.com"));tempList.add(new Tag("Bing", 3, "www.bing.com"));tempList.add(new Tag("Wikipedia", 8, "www.wikipedia.com"));tempList.add(new Tag("Twitter", 5, "www.twitter.com"));tempList.add(new Tag("Msn", 1, "www.msn.com"));tempList.add(new Tag("Amazon", 3, "www.amazon.com"));tempList.add(new Tag("Ebay", 7, "www.ebay.com"));tempList.add(new Tag("LinkedIn", 5, "www.linkedin.com"));tempList.add(new Tag("Live", 7, "www.live.com"));tempList.add(new Tag("Microsoft", 3, "www.microsoft.com"));tempList.add(new Tag("Flicker", 1, "www.flicker.com"));tempList.add(new Tag("Apple", 5, "www.apple.com"));tempList.add(new Tag("Paypal", 5, "www.paypal.com"));tempList.add(new Tag("Craigslist", 7, "www.craigslist.com"));tempList.add(new Tag("Imdb", 2, "www.imdb.com"));tempList.add(new Tag("Ask", 4, "www.ask.com"));tempList.add(new Tag("Weibo", 1, "www.weibo.com"));tempList.add(new Tag("Tagin!", 8, "http://scyp.idrc.ocad.ca/projects/tagin"));tempList.add(new Tag("Shiftehfar", 8, "www.shiftehfar.org"));tempList.add(new Tag("Soso", 5, "www.google.com"));tempList.add(new Tag("XVideos", 3, "www.xvideos.com"));tempList.add(new Tag("BBC", 5, "www.bbc.co.uk"));return tempList;}
              
             
            
           

Source code click to open the link

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.