marginlayoutparamss的leftMargin属性是什么意思

leftmargin是什么意思,可以用什么代替?_百度知道
leftmargin是什么意思,可以用什么代替?
我用一个模板作了个网站,网页兼容性验证时,出现了很多这样的结果:标签body在当前活动版本中不具有属性leftmargin(或者是topmargin、scroll、height、bgcolor等)。[html4.0]这些是什么东西,可以用什么代替?我的环境是DM MX2004
提问者采纳
可以使用CSS样式表啊,兼容性比较好,楼主的这些标签很像是用FRONTPAGE作的,插入&head&&/head&之间&style type=&text/css&&body {margin-left:10 /*网页左边距 单位是px*/margin-top:10 /*网页上边距 单位是px*/height:600 /*网页高度 单位是px 一般不这样定义*/background:url(背景图片地址) #ffffff no- /*背景图片 背景色 背景图片不重复 背景图片放在页面左上角*/overflow-x: /*隐藏水平滚动条*/}&/style&
提问者评价
其他类似问题
按默认排序
其他1条回答
leftmargin是左边距的像素数,topmargin是上边距的像素数,scroll是滚动条height是实体的高度bgcolor是背景颜色没有可代替的东西
margin的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁10372人阅读
好久没发东西了,快三个月了。忙,无他尔。接下来进入正题。
好多应用在搜索界面都有关键字飞入飞出的效果。我自己也实现了下。先上效果图:
实现该效果需要解决以下五点:
1.布局的选用。
2.确定动画区域,即布局的宽高。
3.对关键字坐标的随机分配。
4.对随机分配的坐标进行向中心靠拢。
5.动画的实现。
本文内容归CSDN博客博主Sodino 所有
转载请注明出处:
下面各个击破:
1.布局的选用。
&& &在五种常用布局中,可实现此效果的有AbsoluteLayout、FrameLayout、RelativeLayout三种。一开始我选用的AbsoluteLayout,运行结果出来后,发现AbsoluteLayout下的TextView一旦超出其显示范围,超出的范围将无法显示,而余下的两种布局,其超出的范围会自动换行显示出来(TextView长度超出父组件显示范围可在代码中避免,此处仅是举例,说明AbsoluteLayout的先天不足)。另,官方已不再推荐使用AbsoluteLayout,所以本处凭个人喜好我选用FrameLayout。
&& &FrameLayout如何实现AbsoluteLayout对其子组件进行定点放置呢?答案在FrameLayout.LayoutParams上。该类有相关属性为leftMargin及topMargin。要将子组件左上角定点放置在其父组件中的(x,y)处,仅需对leftMargin赋值为x,对topMargin赋值为y即可。
2.确定动画区域,即布局的宽高。
&& &在对显示关键字TextView进行分配坐标之前,应该要先知道父组件的宽高各有多少可供随机分配。
&& &获取宽高使用到OnGlobalLayoutListener。本例中KeywordsFlow继承自FrameLayout,同时也实现了OnGlobalLayoutListener接口,在其初始化方法init()中设置了监听getViewTreeObserver().addOnGlobalLayoutListener(this);
&& &当监听事件被触发时,即可获取而已的宽高。
public void onGlobalLayout() {
int tmpW = getWidth();
int tmpH = getHeight();
if (width != tmpW || height != tmpH) {
width = tmpW;
height = tmpH;
3.对关键字坐标的随机分配。
&& &TextView坐标的随机是否到位分配决定着整体效果的好坏。
&& &本例设定关键字最多为10个,在布局的X Y轴上各自进行10等分。每个关键字依照其添加顺序随机各自在X轴和Y轴上选择等分后的10点中的某个点为margin的值。此值为糙值,需要对X轴进行越界修正,对Y轴进行向中心靠拢修正。对X轴坐标的修正为如下:
// 获取文本长度
Paint paint = txt.getPaint();
int strWidth = (int) Math.ceil(paint.measureText(keyword));
xy[IDX_TXT_LENGTH] = strW
// 第一次修正:修正x坐标
if (xy[IDX_X] + strWidth & width - (xItem && 1)) {
int baseX = width - strW
// 减少文本右边缘一样的概率
xy[IDX_X] = baseX - xItem + random.nextInt(xItem && 1);
} else if (xy[IDX_X] == 0) {
// 减少文本左边缘一样的概率
xy[IDX_X] = Math.max(random.nextInt(xItem), xItem / 3);
4.对随机分配的坐标进行向中心靠拢。
&& &此操作将修正Y轴坐标。
&& &由于随机分配中,可能出现某个关键字在朝中心点方向上的空间中再没有其它关键字了,此时该关键字在Y轴上应该朝中心点靠拢。实现代码如下:
// 第二次修正:修正y坐标
int yDistance = iXY[IDX_Y] - yC
// 对于最靠近中心点的,其值不会大于yItem&br/&
// 对于可以一路下降到中心点的,则该值也是其应调整的大小&br/&
int yMove = Math.abs(yDistance);
inner: for (int k = i - 1; k &= 0; k--) {
int[] kXY = (int[]) listTxt.get(k).getTag();
int startX = kXY[IDX_X];
int endX = startX + kXY[IDX_TXT_LENGTH];
// y轴以中心点为分隔线,在同一侧
if (yDistance * (kXY[IDX_Y] - yCenter) & 0) {
// Log.d(&ANDROID_LAB&, &compare:& +
// listTxt.get(k).getText());
if (isXMixed(startX, endX, iXY[IDX_X], iXY[IDX_X] + iXY[IDX_TXT_LENGTH])) {
int tmpMove = Math.abs(iXY[IDX_Y] - kXY[IDX_Y]);
if (tmpMove & yItem) {
yMove = tmpM
} else if (yMove & 0) {
// 取消默认值。
yMove = 0;
// Log.d(&ANDROID_LAB&, &break&);
// Log.d(&ANDROID_LAB&, txt.getText() + & yMove=& + yMove);
if (yMove & yItem) {
int maxMove = yMove - yI
int randomMove = random.nextInt(maxMove);
int realMove = Math.max(randomMove, maxMove && 1) * yDistance / Math.abs(yDistance);
iXY[IDX_Y] = iXY[IDX_Y] - realM
iXY[IDX_DIS_Y] = Math.abs(iXY[IDX_Y] - yCenter);
// 已经调整过前i个需要再次排序
sortXYList(listTxt, i + 1);
&& &&& &&& &
&& &&& &&& &
5.动画的实现。
&& &每个TextView的动画都有包括三部分:伸缩动画ScaleAnimation、透明度渐变动画AlphaAnimation及位移动画TranslateAnimation。以上三个动画中除了位移动画是独立的,其它两种动画都是可以共用的。三种动画的组合使用AnimationSet拼装在一起同时作用在TextView上。动画的实现如下:
public AnimationSet getAnimationSet(int[] xy, int xCenter, int yCenter, int type) {
AnimationSet animSet = new AnimationSet(true);
animSet.setInterpolator(interpolator);
if (type == OUTSIDE_TO_LOCATION) {
animSet.addAnimation(animAlpha2Opaque);
animSet.addAnimation(animScaleLarge2Normal);
TranslateAnimation translate = new TranslateAnimation(
(xy[IDX_X] + (xy[IDX_TXT_LENGTH] && 1) - xCenter) && 1, 0, (xy[IDX_Y] - yCenter) && 1, 0);
animSet.addAnimation(translate);
} else if (type == LOCATION_TO_OUTSIDE) {
animSet.addAnimation(animAlpha2Transparent);
animSet.addAnimation(animScaleNormal2Large);
TranslateAnimation translate = new TranslateAnimation(0,
(xy[IDX_X] + (xy[IDX_TXT_LENGTH] && 1) - xCenter) && 1, 0, (xy[IDX_Y] - yCenter) && 1);
animSet.addAnimation(translate);
} else if (type == LOCATION_TO_CENTER) {
animSet.addAnimation(animAlpha2Transparent);
animSet.addAnimation(animScaleNormal2Zero);
TranslateAnimation translate = new TranslateAnimation(0, (-xy[IDX_X] + xCenter), 0, (-xy[IDX_Y] + yCenter));
animSet.addAnimation(translate);
} else if (type == CENTER_TO_LOCATION) {
animSet.addAnimation(animAlpha2Opaque);
animSet.addAnimation(animScaleZero2Normal);
TranslateAnimation translate = new TranslateAnimation((-xy[IDX_X] + xCenter), 0, (-xy[IDX_Y] + yCenter), 0);
animSet.addAnimation(translate);
animSet.setDuration(animDuration);
return animS
&& &最后有个小点需要再次提醒下,使用KeywordsFlow时,在Eclipse开发环境下导出混淆包时,需要在proguard.cfg中添加:-keep public class * extends android.widget.FrameLayout
&& &否则将会提示无法找到该类。
&& &好了,文嗦嗦的东西到此结束,贴上Java代码如下,xml代码请根据效果图自己鼓捣吧。
ActKeywordAnim.java
package lab.sodino.
import java.util.R
import android.app.A
import android.content.I
import android.net.U
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.TextV
* @author Sodino E-mail:
* @version Time: 下午03:34:16
public class ActKeywordAnim extends Activity implements OnClickListener {
public static final String[] keywords = { &QQ&, &Sodino&, &APK&, &GFW&, &铅笔&,//
&短信&, &桌面精灵&, &MacBook Pro&, &平板电脑&, &雅诗兰黛&,//
&卡西欧 TR-100&, &笔记本&, &SPY Mouse&, &Thinkpad E40&, &捕鱼达人&,//
&内存清理&, &地图&, &导航&, &闹钟&, &主题&,//
&通讯录&, &播放器&, &CSDN leak&, &安全&, &3D&,//
&美女&, &天气&, &4743G&, &戴尔&, &联想&,//
&欧朋&, &浏览器&, &愤怒的小鸟&, &mmShow&, &网易公开课&,//
&iciba&, &油水关系&, &网游App&, &互联网&, &365日历&,//
&脸部识别&, &Chrome&, &Safari&, &中国版Siri&, &A5处理器&,//
&iPhone4S&, &摩托 ME525&, &魅族 M9&, &尼康 S2500& };
private KeywordsFlow keywordsF
private Button btnIn, btnO
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnIn = (Button) findViewById(R.id.btnIn);
btnOut = (Button) findViewById(R.id.btnOut);
btnIn.setOnClickListener(this);
btnOut.setOnClickListener(this);
keywordsFlow = (KeywordsFlow) findViewById(R.id.keywordsFlow);
keywordsFlow.setDuration(800l);
keywordsFlow.setOnItemClickListener(this);
feedKeywordsFlow(keywordsFlow, keywords);
keywordsFlow.go2Show(KeywordsFlow.ANIMATION_IN);
private static void feedKeywordsFlow(KeywordsFlow keywordsFlow, String[] arr) {
Random random = new Random();
for (int i = 0; i & KeywordsFlow.MAX; i++) {
int ran = random.nextInt(arr.length);
String tmp = arr[ran];
keywordsFlow.feedKeyword(tmp);
public void onClick(View v) {
if (v == btnIn) {
keywordsFlow.rubKeywords();
// keywordsFlow.rubAllViews();
feedKeywordsFlow(keywordsFlow, keywords);
keywordsFlow.go2Show(KeywordsFlow.ANIMATION_IN);
} else if (v == btnOut) {
keywordsFlow.rubKeywords();
// keywordsFlow.rubAllViews();
feedKeywordsFlow(keywordsFlow, keywords);
keywordsFlow.go2Show(KeywordsFlow.ANIMATION_OUT);
} else if (v instanceof TextView) {
String keyword = ((TextView) v).getText().toString();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse(&.hk/#q=& + keyword));
startActivity(intent);
KeywordsFlow.java
package lab.sodino.
import java.util.LinkedL
import java.util.R
import java.util.V
import android.content.C
import android.graphics.P
import android.util.AttributeS
import android.util.TypedV
import android.view.G
import android.view.V
import android.view.ViewTreeObserver.OnGlobalLayoutL
import android.view.animation.AlphaA
import android.view.animation.A
import android.view.animation.Animation.AnimationL
import android.view.animation.AnimationS
import android.view.animation.AnimationU
import android.view.animation.I
import android.view.animation.ScaleA
import android.view.animation.TranslateA
import android.widget.FrameL
import android.widget.TextV
* 注意,出包时出混淆包,应在proguard.cfg中加入:&br/&
* -keep public class * extends android.widget.FrameLayout&br/&
* @author Sodino E-mail:
* @version Time: 下午03:34:16
public class KeywordsFlow extends FrameLayout implements OnGlobalLayoutListener {
public static final int IDX_X = 0;
public static final int IDX_Y = 1;
public static final int IDX_TXT_LENGTH = 2;
public static final int IDX_DIS_Y = 3;
/** 由外至内的动画。 */
public static final int ANIMATION_IN = 1;
/** 由内至外的动画。 */
public static final int ANIMATION_OUT = 2;
/** 位移动画类型:从外围移动到坐标点。 */
public static final int OUTSIDE_TO_LOCATION = 1;
/** 位移动画类型:从坐标点移动到外围。 */
public static final int LOCATION_TO_OUTSIDE = 2;
/** 位移动画类型:从中心点移动到坐标点。 */
public static final int CENTER_TO_LOCATION = 3;
/** 位移动画类型:从坐标点移动到中心点。 */
public static final int LOCATION_TO_CENTER = 4;
public static final long ANIM_DURATION = 800l;
public static final int MAX = 10;
public static final int TEXT_SIZE_MAX = 25;
public static final int TEXT_SIZE_MIN = 15;
private OnClickListener itemClickL
private static Inter
private static AlphaAnimation animAlpha2O
private static AlphaAnimation animAlpha2T
private static ScaleAnimation animScaleLarge2Normal, animScaleNormal2Large, animScaleZero2Normal,
animScaleNormal2Z
/** 存储显示的关键字。 */
private Vector&String& vecK
private int width,
* go2Show()中被赋值为true,标识开发人员触发其开始动画显示。&br/&
* 本标识的作用是防止在填充keywrods未完成的过程中获取到width和height后提前启动动画。&br/&
* 在show()方法中其被赋值为false。&br/&
* 真正能够动画显示的另一必要条件:width 和 height不为0。&br/&
private boolean enableS
* @see ANIMATION_IN
* @see ANIMATION_OUT
* @see OUTSIDE_TO_LOCATION
* @see LOCATION_TO_OUTSIDE
* @see LOCATION_TO_CENTER
* @see CENTER_TO_LOCATION
private int txtAnimInType, txtAnimOutT
/** 最近一次启动动画显示的时间。 */
private long lastStartAnimationT
/** 动画运行时间。 */
private long animD
public KeywordsFlow(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
public KeywordsFlow(Context context, AttributeSet attrs) {
super(context, attrs);
public KeywordsFlow(Context context) {
super(context);
private void init() {
lastStartAnimationTime = 0l;
animDuration = ANIM_DURATION;
random = new Random();
vecKeywords = new Vector&String&(MAX);
getViewTreeObserver().addOnGlobalLayoutListener(this);
interpolator = AnimationUtils.loadInterpolator(getContext(), android.R.anim.decelerate_interpolator);
animAlpha2Opaque = new AlphaAnimation(0.0f, 1.0f);
animAlpha2Transparent = new AlphaAnimation(1.0f, 0.0f);
animScaleLarge2Normal = new ScaleAnimation(2, 1, 2, 1);
animScaleNormal2Large = new ScaleAnimation(1, 2, 1, 2);
animScaleZero2Normal = new ScaleAnimation(0, 1, 0, 1);
animScaleNormal2Zero = new ScaleAnimation(1, 0, 1, 0);
public long getDuration() {
return animD
public void setDuration(long duration) {
animDuration =
public boolean feedKeyword(String keyword) {
boolean result =
if (vecKeywords.size() & MAX) {
result = vecKeywords.add(keyword);
* 开始动画显示。&br/&
* 之前已经存在的TextView将会显示退出动画。&br/&
* @return 正常显示动画返回true;反之为false。返回false原因如下:&br/&
1.时间上不允许,受lastStartAnimationTime的制约;&br/&
2.未获取到width和height的值。&br/&
public boolean go2Show(int animType) {
if (System.currentTimeMillis() - lastStartAnimationTime & animDuration) {
enableShow =
if (animType == ANIMATION_IN) {
txtAnimInType = OUTSIDE_TO_LOCATION;
txtAnimOutType = LOCATION_TO_CENTER;
} else if (animType == ANIMATION_OUT) {
txtAnimInType = CENTER_TO_LOCATION;
txtAnimOutType = LOCATION_TO_OUTSIDE;
disapper();
boolean result = show();
private void disapper() {
int size = getChildCount();
for (int i = size - 1; i &= 0; i--) {
final TextView txt = (TextView) getChildAt(i);
if (txt.getVisibility() == View.GONE) {
removeView(txt);
FrameLayout.LayoutParams layParams = (LayoutParams) txt.getLayoutParams();
// Log.d(&ANDROID_LAB&, txt.getText() + & leftM=& +
// layParams.leftMargin + & topM=& + layParams.topMargin
// + & width=& + txt.getWidth());
int[] xy = new int[] { layParams.leftMargin, layParams.topMargin, txt.getWidth() };
AnimationSet animSet = getAnimationSet(xy, (width && 1), (height && 1), txtAnimOutType);
txt.startAnimation(animSet);
animSet.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
public void onAnimationRepeat(Animation animation) {
public void onAnimationEnd(Animation animation) {
txt.setOnClickListener(null);
txt.setClickable(false);
txt.setVisibility(View.GONE);
private boolean show() {
if (width & 0 && height & 0 && vecKeywords != null && vecKeywords.size() & 0 && enableShow) {
enableShow =
lastStartAnimationTime = System.currentTimeMillis();
int xCenter = width && 1, yCenter = height && 1;
int size = vecKeywords.size();
int xItem = width / size, yItem = height /
// Log.d(&ANDROID_LAB&, &--------------------------width=& + width +
// & height=& + height + &
xItem=& + xItem
// + & yItem=& + yItem + &---------------------------&);
LinkedList&Integer& listX = new LinkedList&Integer&(), listY = new LinkedList&Integer&();
for (int i = 0; i & i++) {
// 准备随机候选数,分别对应x/y轴位置
listX.add(i * xItem);
listY.add(i * yItem + (yItem && 2));
// TextView[] txtArr = new TextView[size];
LinkedList&TextView& listTxtTop = new LinkedList&TextView&();
LinkedList&TextView& listTxtBottom = new LinkedList&TextView&();
for (int i = 0; i & i++) {
String keyword = vecKeywords.get(i);
// 随机颜色
int ranColor = 0xff000000 | random.nextInt(0x0077ffff);
// 随机位置,糙值
int xy[] = randomXY(random, listX, listY, xItem);
// 随机字体大小
int txtSize = TEXT_SIZE_MIN + random.nextInt(TEXT_SIZE_MAX - TEXT_SIZE_MIN + 1);
// 实例化TextView
final TextView txt = new TextView(getContext());
txt.setOnClickListener(itemClickListener);
txt.setText(keyword);
txt.setTextColor(ranColor);
txt.PLEX_UNIT_SP, txtSize);
txt.setShadowLayer(2, 2, 2, 0xff696969);
txt.setGravity(Gravity.CENTER);
// 获取文本长度
Paint paint = txt.getPaint();
int strWidth = (int) Math.ceil(paint.measureText(keyword));
xy[IDX_TXT_LENGTH] = strW
// 第一次修正:修正x坐标
if (xy[IDX_X] + strWidth & width - (xItem && 1)) {
int baseX = width - strW
// 减少文本右边缘一样的概率
xy[IDX_X] = baseX - xItem + random.nextInt(xItem && 1);
} else if (xy[IDX_X] == 0) {
// 减少文本左边缘一样的概率
xy[IDX_X] = Math.max(random.nextInt(xItem), xItem / 3);
xy[IDX_DIS_Y] = Math.abs(xy[IDX_Y] - yCenter);
txt.setTag(xy);
if (xy[IDX_Y] & yCenter) {
listTxtBottom.add(txt);
listTxtTop.add(txt);
attach2Screen(listTxtTop, xCenter, yCenter, yItem);
attach2Screen(listTxtBottom, xCenter, yCenter, yItem);
/** 修正TextView的Y坐标将将其添加到容器上。 */
private void attach2Screen(LinkedList&TextView& listTxt, int xCenter, int yCenter, int yItem) {
int size = listTxt.size();
sortXYList(listTxt, size);
for (int i = 0; i & i++) {
TextView txt = listTxt.get(i);
int[] iXY = (int[]) txt.getTag();
// Log.d(&ANDROID_LAB&, &fix[
& + txt.getText() + &
// iXY[IDX_X] + & y:& + iXY[IDX_Y] + & r2=&
// + iXY[IDX_DIS_Y]);
// 第二次修正:修正y坐标
int yDistance = iXY[IDX_Y] - yC
// 对于最靠近中心点的,其值不会大于yItem&br/&
// 对于可以一路下降到中心点的,则该值也是其应调整的大小&br/&
int yMove = Math.abs(yDistance);
inner: for (int k = i - 1; k &= 0; k--) {
int[] kXY = (int[]) listTxt.get(k).getTag();
int startX = kXY[IDX_X];
int endX = startX + kXY[IDX_TXT_LENGTH];
// y轴以中心点为分隔线,在同一侧
if (yDistance * (kXY[IDX_Y] - yCenter) & 0) {
// Log.d(&ANDROID_LAB&, &compare:& +
// listTxt.get(k).getText());
if (isXMixed(startX, endX, iXY[IDX_X], iXY[IDX_X] + iXY[IDX_TXT_LENGTH])) {
int tmpMove = Math.abs(iXY[IDX_Y] - kXY[IDX_Y]);
if (tmpMove & yItem) {
yMove = tmpM
} else if (yMove & 0) {
// 取消默认值。
yMove = 0;
// Log.d(&ANDROID_LAB&, &break&);
// Log.d(&ANDROID_LAB&, txt.getText() + & yMove=& + yMove);
if (yMove & yItem) {
int maxMove = yMove - yI
int randomMove = random.nextInt(maxMove);
int realMove = Math.max(randomMove, maxMove && 1) * yDistance / Math.abs(yDistance);
iXY[IDX_Y] = iXY[IDX_Y] - realM
iXY[IDX_DIS_Y] = Math.abs(iXY[IDX_Y] - yCenter);
// 已经调整过前i个需要再次排序
sortXYList(listTxt, i + 1);
FrameLayout.LayoutParams layParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
layParams.gravity = Gravity.LEFT | Gravity.TOP;
layParams.leftMargin = iXY[IDX_X];
layParams.topMargin = iXY[IDX_Y];
addView(txt, layParams);
AnimationSet animSet = getAnimationSet(iXY, xCenter, yCenter, txtAnimInType);
txt.startAnimation(animSet);
public AnimationSet getAnimationSet(int[] xy, int xCenter, int yCenter, int type) {
AnimationSet animSet = new AnimationSet(true);
animSet.setInterpolator(interpolator);
if (type == OUTSIDE_TO_LOCATION) {
animSet.addAnimation(animAlpha2Opaque);
animSet.addAnimation(animScaleLarge2Normal);
TranslateAnimation translate = new TranslateAnimation(
(xy[IDX_X] + (xy[IDX_TXT_LENGTH] && 1) - xCenter) && 1, 0, (xy[IDX_Y] - yCenter) && 1, 0);
animSet.addAnimation(translate);
} else if (type == LOCATION_TO_OUTSIDE) {
animSet.addAnimation(animAlpha2Transparent);
animSet.addAnimation(animScaleNormal2Large);
TranslateAnimation translate = new TranslateAnimation(0,
(xy[IDX_X] + (xy[IDX_TXT_LENGTH] && 1) - xCenter) && 1, 0, (xy[IDX_Y] - yCenter) && 1);
animSet.addAnimation(translate);
} else if (type == LOCATION_TO_CENTER) {
animSet.addAnimation(animAlpha2Transparent);
animSet.addAnimation(animScaleNormal2Zero);
TranslateAnimation translate = new TranslateAnimation(0, (-xy[IDX_X] + xCenter), 0, (-xy[IDX_Y] + yCenter));
animSet.addAnimation(translate);
} else if (type == CENTER_TO_LOCATION) {
animSet.addAnimation(animAlpha2Opaque);
animSet.addAnimation(animScaleZero2Normal);
TranslateAnimation translate = new TranslateAnimation((-xy[IDX_X] + xCenter), 0, (-xy[IDX_Y] + yCenter), 0);
animSet.addAnimation(translate);
animSet.setDuration(animDuration);
return animS
* 根据与中心点的距离由近到远进行冒泡排序。
* @param endIdx
起始位置。
* @param txtArr
待排序的数组。
private void sortXYList(LinkedList&TextView& listTxt, int endIdx) {
for (int i = 0; i & endI i++) {
for (int k = i + 1; k & endI k++) {
if (((int[]) listTxt.get(k).getTag())[IDX_DIS_Y] & ((int[]) listTxt.get(i).getTag())[IDX_DIS_Y]) {
TextView iTmp = listTxt.get(i);
TextView kTmp = listTxt.get(k);
listTxt.set(i, kTmp);
listTxt.set(k, iTmp);
/** A线段与B线段所代表的直线在X轴映射上是否有交集。 */
private boolean isXMixed(int startA, int endA, int startB, int endB) {
boolean result =
if (startB &= startA && startB &= endA) {
} else if (endB &= startA && endB &= endA) {
} else if (startA &= startB && startA &= endB) {
} else if (endA &= startB && endA &= endB) {
private int[] randomXY(Random ran, LinkedList&Integer& listX, LinkedList&Integer& listY, int xItem) {
int[] arr = new int[4];
arr[IDX_X] = listX.remove(ran.nextInt(listX.size()));
arr[IDX_Y] = listY.remove(ran.nextInt(listY.size()));
public void onGlobalLayout() {
int tmpW = getWidth();
int tmpH = getHeight();
if (width != tmpW || height != tmpH) {
width = tmpW;
height = tmpH;
public Vector&String& getKeywords() {
return vecK
public void rubKeywords() {
vecKeywords.clear();
/** 直接清除所有的TextView。在清除之前不会显示动画。 */
public void rubAllViews() {
removeAllViews();
public void setOnItemClickListener(OnClickListener listener) {
itemClickListener =
// public void onDraw(Canvas canvas) {
// super.onDraw(canvas);
// Paint p = new Paint();
// p.setColor(Color.BLACK);
// canvas.drawCircle((width && 1) - 2, (height && 1) - 2, 4, p);
// p.setColor(Color.RED);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:459997次
积分:6079
积分:6079
排名:第1178名
原创:179篇
评论:388条
(3)(5)(2)(4)(1)(1)(5)(11)(2)(5)(1)(2)(2)(2)(4)(4)(5)(2)(2)(4)(1)(1)(4)(2)(3)(3)(3)(5)(2)(8)(7)(3)(6)(3)(2)(3)(1)(5)(12)(2)(2)(7)(4)(2)(13)(4)(4)(2)(1)

我要回帖

更多关于 ie8 margin left 的文章

 

随机推荐