Android 3d cloud tag and android3d tag

Source: Internet
Author: User
Tags comparable gety

Android 3d cloud tag and android3d 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 <TextView> mTextView; private List <RelativeLayout. layoutParams> mParam S; private int shiftLeft; float dowx = 0; float dowy = 0; float cutx = 100; float cuty = 100; public TagCloudView (Context mContext, int width, int height, list <Tag> tagList) {this (mContext, width, height, tagList, 6, 34, 1);} public TagCloudView (Context mContext, int width, int height, list <Tag> tagList, int textSizeMin, int textSizeMax, int scrollSpeed) {super (mContext); this. mContext = mContext; tspeed = SC RollSpeed; 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 <TextView> (); MParams = new ArrayList <RelativeLayout. LayoutParams> (); 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 ). a DdRule (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. getColor B () * 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. se NdEmptyMessage (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 onTouch Event (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 <Object> {private List <Tag> 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 floa T [] tagColor1; private float [] tagColor2; private int textSizeMax, textSizeMin; private float sin_mAngleX, cosine, cosine, 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 <Tag> ();} public TagCloud (List <Tag> tag S) {this (tags, DEFAULT_RADIUS);} public TagCloud (List <Tag> tags, int radius) {this (tags, radius, DEFAULT_COLOR1, DEFAULT_COLOR2, TEXT_SIZE_MIN, TEXT_SIZE_MAX );} public TagCloud (List <Tag> tags, int radius, int textSizeMin, int textSizeMax) {this (tags, radius, DEFAULT_COLOR1, DEFAULT_COLOR2, textSizeMin, textSizeMax );} public TagCloud (List <Tag> tags, int radius, float [] tagColor1, float [] tagColor2) {this (Tags, radius, tagColor1, tagColor2, TEXT_SIZE_MIN, TEXT_SIZE_MAX);} public TagCloud (List <Tag> 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 () {retur N tagCloud. iterator ();}/*** create * @ param distrEven */public void create (boolean distrEven) {this. distrEven = 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 = (smallest = 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 <max + 1; I ++) {if (distrEven) {phi = Math. acos (-1.0 + (2.0 * I-1.0)/max); theta = Math. sqrt (max * Math. PI) * phi;} else {phi = Math. random () * (Math. PI); theta = Math. random () * (2 * Math. PI);} tagCloud. get (I-1 ). setLocX (int) (radius * Math. cos (theta) * Math. sin (phi); tagCloud. get (I-1 ). setLocY (int) (radius * Math. sin (theta) * Math. sin (phi); tagCloud. get (I-1 ). setLocZ (int) (radius * Math. cos (phi);}/*** update all Tag locations */private void updateAll () {int max = tagCloud. size (); for (int j = 0; j <max; j ++) {float rx1 = (tagCloud. get (j ). getLocX (); float ry1 = (tagCloud. get (j ). getLocY () * cos_mAngleX + tagCloud. get (j ). getLocZ () *-sin_mAngleX; float rz1 = (tagCloud. get (j ). getLocY () * sin_mAngleX + tagCloud. get (j ). getLocZ () * cos_mAngleX; float rx2 = rx1 * cos_mAngleY + rz1 * sin_mAngleY; float ry2 = ry1; float rz2 = rx1 *-sin_mAngleY + rz1 * cos_mAngleY; float rx3 = rx2 * cos_mAngleZ + ry2 *-sin_mAngleZ; float ry3 = rx2 * sin_mAngleZ + ry2 * cos_mAngleZ; float rz3 = rz2; tagCloud. get (j ). setLocX (rx3); tagCloud. get (j ). setLocY (ry3); tagCloud. get (j ). setLocZ (rz3); int diameter = 2 * radius; float per = diameter/(diameter + rz3); tagCloud. get (j ). setLoc2DX (int) (rx3 * per); tagCloud. get (j ). setLoc2DY (int) (ry3 * per); tagCloud. get (j ). setScale (per); tagCloud. get (j ). setAlpha (per/2);} // sort Collections for tags. sort (tagCloud);}/*** calculate the font color * @ param perc * @ return */private float [] getColorFromGradient (float perc) {float [] tempRGB = new float [4]; tempRGB [0] = (perc * (tagColor1 [0]) + (1-perc) * (tagColor2 [0]); tempRGB [1] = (perc * (tagColor1 [1]) + (1-perc) * (tagColor2 [1]); tempRGB [2] = (perc * (tagColor1 [2]) + (1-perc) * (tagColor2 [2]); tempRGB [3] = 1; return tempRGB ;} /*** calculate the font size * @ param perc * @ return */private int getTextSizeGradient (float perc) {int size; size = (int) (perc * textSizeMax + (1-perc) * textSizeMin); return size ;} /*** calculate the x y zcoordinate of the circle * @ param mAngleX * @ param mAngleY * @ param mAngleZ */private void sineCosine (float mAngleX, float mAngleY, float mAngleZ) {double degToRad = (Math. PI/180); sin_mAngleX = (float) Math. sin (mAngleX * degToRad); cos_mAngleX = (float) Math. cos (mAngleX * degToRad); sin_mAngleY = (float) Math. sin (mAngleY * degToRad); cos_mAngleY = (float) Math. cos (mAngleY * degToRad); sin_mAngleZ = (float) Math. sin (mAngleZ * degToRad); cos_mAngleZ = (float) Math. cos (mAngleZ * degToRad);}/*** The following is the get set Method * @ return */public int getRadius () {return radius;} public void setRadius (int radius) {this. radius = radius;} public float [] getTagColor1 () {return tagColor1;} public void setTagColor1 (float [] tagColor) {this. tagColor1 = tagColor;} public float [] getTagColor2 () {return tagColor2;} public void setTagColor2 (float [] tagColor2) {this. tagColor2 = tagColor2;} public float getRvalue (float [] color) {if (color. length> 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 <Tag> {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<Tag> myTagList= createTags();mTagCloudView = new TagCloudView(this, width, height, myTagList ); setContentView(mTagCloudView);mTagCloudView.requestFocus();mTagCloudView.setFocusableInTouchMode(true);}private List<Tag> createTags(){List<Tag> tempList = new ArrayList<Tag>();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


How to program 3d tag cloud on android system (3d tag cloud special effect)

Hello! First, there are many types of logs
Log. v (String tag, String msg); // redundant message
Log. d (String tag, String msg); // debug the message
Log. I (String tag, String msg); // common message
Log. w (String tag, String msg); // warning message
Log. e (String tag, String msg); // error message
The following statement can be used to create a log tag.
Private static final String TAG = "the tag you want to set here"

In the program, I usually use Log. v (TAG, "information to be printed ")
In this way, the custom TAG can be displayed in logcat.


Q: Is 3d cloud tag implemented on Android?

Blog.csdn.net/..615529
This is the idea of implementation. At present, there is seldom a comprehensive solution shared on the Internet,
However, there are many basic functions
Download.csdn.net/detail/wl455624651/3866247
For example ~
I am also working on the 3D tag cloud. Trying to solve
 

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.