Как я могу нарисовать несколько друзей в топологии звезды в Android - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть некоторые проблемы.

Допустим, у меня есть Q Иконки (простая иконка, скажем, логотип Android), и я хочу поместить их в топологию звезды относительно единого центра звезды (иконки) и соединить их наandroid canvas.

enter image description here

Как мне это сделать?

любые точные ссылки?

любой алгоритм информации?

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

По сути, вам нужно создать точки вокруг центра, дать точкам значок и линию, соединяющую их с центром.
Создание 2d точек на окружности можно выполнить с помощью косинуса / синуса:

double angle;
point.x = offsetX + radius*Math.cos(angle);
point.y = offsetY + radius*Math.sin(angle);

Увеличивайте угол с подходящим значением для каждого контакта и сохраняйте точки, подобные этой, в массиве или списке.
Когда дело доходит до рисования, нарисуйте значок по центру в его точке (yourCanvas.drawBitmap()) и нарисуйте линию к центральной точке (yourCanvas.drawLine()).

0 голосов
/ 22 декабря 2011
public  void starTopology(Canvas mCanvas,int noOfFriends,float centerX,float centerY,int radious) {


        final double PI = 3.14;
        final double MARGIN = (2*PI)/noOfFriends;
        final double OFFSETX = centerX;
        final double OFFSETY = centerY;
        final int RADIUS = radious;

        float pointXCoord = 0;
        float pointYCoord = 0;
        double NextPositionOnCircumference = MARGIN;



        Paint myCustomizedBrush = new Paint();
        myCustomizedBrush.setAntiAlias(true);

        myCustomizedBrush.setColor(Color.WHITE);


        for(int i= 0; i < noOfFriends; i++){

            pointXCoord =  (float) (OFFSETX + RADIUS * Math.cos(NextPositionOnCircumference));
            pointYCoord  = (float) (OFFSETY + RADIUS * Math.sin(NextPositionOnCircumference));

            NextPositionOnCircumference += MARGIN;
            mCanvas.drawLine((float)OFFSETX, (float)OFFSETY, pointXCoord, pointYCoord, myCustomizedBrush);
            pointXCoord -= 10;
            pointYCoord -= 10;
            mCanvas.drawBitmap(Utility.FriendProfilePic.get(i), pointXCoord, pointYCoord, null);


        }
        mCanvas.drawCircle((float)OFFSETX, (float)OFFSETY, 5, myCustomizedBrush);

}

...