Страница 1 из 1

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

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

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

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 , но можно ли программно менять цвет этого круга?

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

Добавлено: 19 дек 2013, 08:56
rezak90
когда то рисовал круг, но толку давать код если ты не то что маны не понимаешь а и обычное наследование не можешь реализовать

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

Добавлено: 19 дек 2013, 09:09
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
device-2013-12-19-100744.png (32.31 КБ) 4296 просмотров

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

Добавлено: 19 дек 2013, 10:02
knight
еще один способ я создал свою вьюху отнаследовавшись от обыного виев

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

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));

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

Добавлено: 20 дек 2013, 02:39
DeMoZbox
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 о которых в примерах ни слова

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

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