android中角標的實現

2021-08-27 15:06:37 字數 2654 閱讀 6027

如下圖,角標在移動裝置中是比較常見的ui元素。各種「最新」、「vip」、「最熱」之類的層出不窮。

在展現上最簡單的做法是讓ui同學ps一張角標輸入「最新」、「vip」、「最熱」等蓋在要特別醒目提醒的控制項上面即可。當然偷懶是沒有一勞永逸的做法的,實現帶文字的角標在當下android裝置如此繁榮的情形下,碼工們必然會為千奇百怪的適配而勞碌成大牛的,如果頻繁更換中的文字ui設計師也會煩滴。

下文**第一種角標的**實現方式,其他三種還有比較少見的右下角、左下角的角標也可以照著做了。

把第一種角標

而這個圖形我們可以看作是乙個小長方形旋轉某個角度後,底邊兩點剛好和大長方形左邊和頂邊鏈結疊加所成的直角三角形。

在android中textview、linearlayout是方形的控制項。那麼,如果我們用textview替代小長方形、linearlayout替代大長方形,在textview靠頂部左對齊的情況下,由下圖看到這個幾何圖形可從a->b->c變換而成。

最終的圖形那麼是

其中點d座標即是textview的位移點,而∠bah則是textview反方向旋轉的角度。

剩下的就是中學幾何計算了。忘了吧!我們複習下要用到的公式:

sina=對邊/斜邊

cosa=鄰邊/斜邊

a角角度=arcsina/π*180°

勾股定理 c^2=a^2+b^2

好了,這幾個公式夠我們用了。

根據ui同學的設計圖,那麼eb、ea兩三角邊是可以量出來滴(需要注意的是eb不一定=ea)。

通過垂直三角形、長方形的各種垂直、平衡關係

可得∠bah=∠ebf=∠deg=∠gad

ab=√(eb^2+ab^2)

ef=sin(∠ebf)*eb

dg=sin(∠gad)*da=sin(∠ebf)*ef

ga=cos(∠gad)*da=cos(∠ebf)*ef

eg=ea-ga

到這裡就是怎麼在**中對textview做移動和旋轉動作了。由於多次嘗試直接對canvas做移動旋轉失敗,所以我採用animation來完成這一系列動作。下面是實現控制項的**。

package com.droidwolf.superscript;

import android.content.context;

import android.graphics.matrix;

import android.util.attributeset;

import android.util.displaymetrics;

import android.util.typedvalue;

import android.view.view;

import android.view.animation.animation;

import android.view.animation.transformation;

import android.widget.textview;

public class superscriptview extends textview

public superscriptview(context context, attributeset attrs)

public superscriptview(context context, attributeset attrs, int defstyle)

@override

public void setvisibility(int visibility)

private void init(context context, attributeset attrs)

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else

} @override

protected void onlayout(boolean changed, int left, int top, int right, int bottom)

private void calc(int leftedge, int topedge)

private animation manimation = new animation()

matrix tran = t.getmatrix();

tran.settranslate(mx, my);

tran.postrotate(mdegress, mx, my);

} };

}

附件是實現的demo。我還實現了第一張圖的另外三種角標到乙個控制項,請移步到我的bitbucket。

Silverlight中如何實現上下標的顯示

原文 1.在silverlight中遇到需要顯示上標或者下標 如 水的化學式h2o 時,我們可以使用silverlight中專門處理的上下標的特殊字元顯示。上標的特殊字元 superscript 0 u 2070 1 u 00b9 2 u 00b2 3 u 00b3 4 9 u 2074 2079 ...

Android圓形角標

view import android.content.context import android.content.res.typedarray import android.graphics.canvas import android.graphics.color import android....

標尺及游標的實現

先看效果圖 最近在做乙個組態的專案,裡面涉及到在設計模式時容器裡加個標尺及游標,標尺很容易畫,在容器裡重繪即可,但游標把我徹底搞暈了 在網上搜尋了很多,都沒找到好的方法.1.我實驗了全域性滑鼠鉤子,應用程式滑鼠鉤子,有人或許疑惑直接使用mousemove不就行了嗎?其實你忘了我說的是在組態方式的設計...