2015-12-03 4 views
0

Я пытался нарисовать Canvas на ImageView, но после создания растрового изображения я не вижу изображения на своем экране. Единственное, что я получаю, это небольшой круг, который я нарисовал в методе onDraw. Я хочу иметь Canvas на ImageView.Рисование холста на ImageView/растровое изображение

У меня есть следующий код:

public class MainActivity extends AppCompatActivity { 

    ImageView imageView; 
    Bitmap myBitmap; 
    Paint paint; 
    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button) findViewById(R.id.button); 

    } 

    public void onClickButton(View view) { 

    View v = new DrawCanvas(getApplicationContext()); 
    Bitmap bitmap = Bitmap.createBitmap(48, 48, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 

    v.draw(canvas); 
    imageView = (ImageView) findViewById(R.id.testpicture); 
    imageView.setImageBitmap(bitmap); 
    } 
} 

и

public class DrawCanvas extends View { 

    Paint paint = new Paint(); 

    public DrawCanvas(Context context) { 
     super(context); 
    } 

    public DrawCanvas(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 


    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     paint.setColor(Color.RED); 

     canvas.drawCircle(25, 25, 5, paint); 
    } 
} 

Спасибо заранее!

ответ

0

Во-первых, вы чрезмерны. Вам не нужно или хотите, чтобы вы делали то, что делаете. Если вы хотите нарисовать круг, сделайте это непосредственно на холсте, используя canvas.drawCircle в вашем onClick.

Во-вторых, alling setImageBitmap перезаписывает любые предыдущие растровые изображения, которые вы установили. Если вы хотите, чтобы это отображалось по сравнению с предыдущим изображением, у вас есть 2 варианта:

1) Используйте два изображения друг на друга и установите верхнее изображение в растровое изображение, сделанное на холсте (чтобы сделать это, вы возможно, необходимо убедиться, что цвет фона на растровом изображении прозрачен).

2) Создайте новый вид подкласса с ImageView, который отображает 2 растровых изображения путем переопределения onDraw.

Первый подход, вероятно, проще.

Смежные вопросы