-1

Я новичок в Android в Android, и я экспериментирую с объектом Canvas.Как я могу правильно использовать класс Canvas для показа изображения в ImageView в этом простом приложении для Android?

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

Так что у меня star.png (32х32 пикселей значок в моих /RES/рисуем/ папки), и я пытаюсь

Это мой activity_main.xml файл конфигурации расположение:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 

    <ImageView 
     android:id="@+id/star_container" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Этот макет содержит ImageView, имеющий ID = star_container, который где я должен рисовать изображение с помощью Холста

И это MainActivity класса, обрабатывать эту точку зрения:

public class MainActivity extends AppCompatActivity { 


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


     ImageView imgView = (ImageView) findViewById(R.id.star_container); 

     Canvas canvas; 

     Bitmap star = BitmapFactory.decodeResource(getResources(), R.drawable.star); 
     Bitmap output = Bitmap.createBitmap(32, 32, Bitmap.Config.ARGB_8888); 
     canvas = new Canvas(output); 

     canvas.drawBitmap(star, star.getWidth() + 2, 0, null); 

     imgView.setImageDrawable(new BitmapDrawable(getResources(), output)); 


    } 
} 

Так в OnCreate() метода я извлечение ImageView где образ должен быть помещенным. Затем я создать Bitmap объекта извлечение star.png изображения из resoruces, которые будут добавлены к otuput Bitmap с использованием Холста.

Наконец я установить этот выход Bitmap в получить ImageView.

Так я ожидал, что, когда приложение работает, предыдущий ImageView содержит star.png образ, но он не появляется.

У меня нет ошибки при выполнении этого приложения, но единственным результатом, который я получаю, является текстовое сообщение, определенное в TextView.

Почему? Что не так? Что мне не хватает? Как я могу изменить этот код и позволить ему работать?

+0

Это не то, как вы используете Canvas вообще. Чтобы сделать вид с помощью Canvas, вы создадите собственный класс View и переопределите onDraw. Вам будет передан холст для рисования. Код, который у вас здесь, настолько запутан, что он не имеет большого значения. –

ответ

0

другой способ - с помощью прямоугольника площади:

Canvas canvas; 

    Bitmap star = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
    Bitmap output = Bitmap.createBitmap(star.getWidth(), star.getHeight(), Bitmap.Config.ARGB_8888); 
    canvas = new Canvas(output); 
    Rect source = new Rect(0, 0, star.getWidth(), star.getHeight()); 
    canvas.drawBitmap(star, null, source, null);  
    imgView.setImageBitmap(output); 
+0

Нет, я не могу, потому что, как объяснено, это первый шаг, чтобы понять, как использовать Canvas. Теперь я пытаюсь с одним изображением, но мне нужен Canvas, потому что мне нужно создать композицию изображения – AndreaNobili

1

Согласно документам:

слева: Положение в левой части точечного рисунка втягивается

Проблемы находится здесь:

canvas.drawBitmap(star, star.getWidth() + 2, 0, null); 

Вы используете значение слева, которое из растровых границ, поэтому ничего не рисуется, попробуйте следующее: canvas.drawBitmap(star, 0, 0, null);

Android API предоставляет еще один метод установки Bitmap в drawable непосредственно: ImageView#setImageBitmap(Bitmap bm)

Я думаю, лучше использовать обычай View и исследовать возможности Canvas (в методе onDraw)

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