нарисовать круг, сменить цвет.

Ответить
DeMoZbox
Сообщения: 4
Зарегистрирован: 19 дек 2013, 06:30

нарисовать круг, сменить цвет.

Сообщение DeMoZbox » 19 дек 2013, 07:03

нужно нарисовать круг, программно сменить цвет круга.
гуглил.
все примеры, начинаются подобным образом :

Код: Выделить всё

package кг.simplepaint; 

public class Draw2D extends View{
    public Draw2D(Context context) {
	        super(context);
	}  
	@Override
	protected void onDraw(Canvas canvas){
	    super.onDraw(canvas);
    }
}
это ставит меня в тупик, так как у меня уже есть лэйаут, на котором есть элементы и есть класс, который extends Activity
уже делал несколько различных приложений, которые используют разные классы как в одном "MainActivity" так и с отдельными файлами .java
Но делаю все это исключительно по примерам, так как на опыте уже понял, что только так мне может быть что то понятно, маны же от гугла, определенно, требуют наличия третьего глаза-просветления на лбу(я, как новичек , не врубаюсь как по этим манам что то понять можно ).

пожалуйста дайте простой пример, как можно кодом нарисовать круг, на лэйауте к уже существующими элементами и классом, который с ними работает (кнопка с onClick)
буду рад , если кто то мне скинет ссылку на мануал, обьясняющий как воспринимать информацию из официальной справки developer.android.com =[

вполне могу рисовать круг с помощью XML , но можно ли программно менять цвет этого круга?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: нарисовать круг, сменить цвет.

Сообщение rezak90 » 19 дек 2013, 08:56

когда то рисовал круг, но толку давать код если ты не то что маны не понимаешь а и обычное наследование не можешь реализовать
R.id.team
Политика на форуме запрещена

Аватара пользователя
alexmedv
Сообщения: 29
Зарегистрирован: 29 май 2013, 12:55

Re: нарисовать круг, сменить цвет.

Сообщение alexmedv » 19 дек 2013, 09:09

Добавьте в вашу активити ImageView и вставьте следующий код

[syntax=java]import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv = (ImageView) findViewById(R.id.imageView1);
Bitmap bitmap = Bitmap.createBitmap(200,200,Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
canvas.drawPaint(paint);
paint.setAntiAlias(true);
paint.setColor(Color.RED);
canvas.drawCircle(100, 100, 40, paint);
iv.setImageBitmap(bitmap);
}
}[/syntax]

В результате будет нарисован круг желаемого цвета:
device-2013-12-19-100744.png
device-2013-12-19-100744.png (32.31 КБ) 4287 просмотров

Аватара пользователя
knight
Сообщения: 44
Зарегистрирован: 21 сен 2012, 09:25

Re: нарисовать круг, сменить цвет.

Сообщение knight » 19 дек 2013, 10:02

еще один способ я создал свою вьюху отнаследовавшись от обыного виев

Код: Выделить всё

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.view.View;
 
public class CircleView extends View  {
    private int height;
    private int width;
    Paint paint=new Paint();
    
    int c;
    
    
    public CircleView(Context context, AttributeSet attrs) {
    super(context, attrs);
    c=Color.WHITE;
    }
   
    public CircleView(Context context){
        this(context, null);
    }
    
    @Override
    protected void onMeasure(int widthSpecId, int heightSpecId)
    {
        this.height = View.MeasureSpec.getSize(heightSpecId);
        this.width = View.MeasureSpec.getSize(widthSpecId);
        setMeasuredDimension(width, height);
    }
    
    @Override
    public void setBackgroundColor(int color) {
        c=color;
    }

    
    
    @Override
    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);
       
        paint.setColor(c);
        canvas.drawCircle(width/2, height/2, width/2, paint);
    }
}



CircleView krug = new CircleView(context);
krug.setBackgroundColor(Color.parseColor("#" + category.cat_color));

DeMoZbox
Сообщения: 4
Зарегистрирован: 19 дек 2013, 06:30

Re: нарисовать круг, сменить цвет.

Сообщение DeMoZbox » 20 дек 2013, 02:39

alexmedv писал(а):Добавьте в вашу активити ImageView и вставьте следующий код

[syntax=java]import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv = (ImageView) findViewById(R.id.imageView1);
Bitmap bitmap = Bitmap.createBitmap(200,200,Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
canvas.drawPaint(paint);
paint.setAntiAlias(true);
paint.setColor(Color.RED);
canvas.drawCircle(100, 100, 40, paint);
iv.setImageBitmap(bitmap);
}
}[/syntax]

В результате будет нарисован круг желаемого цвета:
device-2013-12-19-100744.png
большое спасибо, в своем проэкте отталкиватьсся буду от этих четырех строчек:

Код: Выделить всё

Paint paint = new Paint();        
    paint.setColor(Color.BLUE);
    canvas.drawCircle(100, 100, 40, paint);  
    iv.setImageBitmap(bitmap);
Но для личного развития, как можно вставить в проэкт код, основаных на наследовании от View ?

самих примеров кода наследования хватает в интернете, и здесь knight поделился своим примером,
но меня интересует то, как это я применю в моем , например , MainActivity, которое уже exstends Activity и setContentView(R.layout.activity_main);

в моем понимании- необходимо создание отдельного класса со своим .java файлом , но для того чтобы к нему обращаться, мне придется использовать intent или Adapter о которых в примерах ни слова

Аватара пользователя
alexmedv
Сообщения: 29
Зарегистрирован: 29 май 2013, 12:55

Re: нарисовать круг, сменить цвет.

Сообщение alexmedv » 20 дек 2013, 08:52

как можно вставить в проэкт код, основаных на наследовании от View ?
1) В отдельном файле создаете класс наследник View.
2) В вашей активити через findViewById получаете ссылку на Layout внутри которого размещаются все остальные элементы графического интерфейса.
3) Создаете экземпляр вашего наследника View
4) Вызываете метод addView для вашего Layout и передаете туда ссылку на ваш View

Ответить