наложите два изображения в андроиде для установки imageview

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

Это разъединение означает, что никогда не бывает окна, в течение которого клиент подписывается на тему, а другой (или тот же) клиент публикует эту тему. Это можно исправить, подключившись один раз в конструкторе Form и используя то же соединение MQTT в вашем приложении. Это будет означать удаление следующих двух строк из обоих обработчиков щелчков:

client = new MqttClient("broker.hivemq.com");
byte code = client.Connect("lenovofullondude");

Можно ли создать два разных приложения. И второе приложение получит сообщение по этой теме (поскольку он подписчик)

Да. Но обоим приложениям понадобятся разные идентификаторы клиентов во время соединения MQTT.

98
задан AutonomousApps 10 July 2015 в 05:01
поделиться

2 ответа

Вы можете пропустить сложные манипуляции с Canvas и сделать это полностью с помощью Drawables, используя LayerDrawable . У вас есть один из двух вариантов: вы можете либо определить его в XML , а затем просто установить изображение, либо вы можете настроить LayerDrawable динамически в коде.

Решение №1 (через XML):

Создайте новый XML-файл Drawable, назовем его layer.xml :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/t" />
    <item android:drawable="@drawable/tt" />
</layer-list>

Теперь установите изображение, используя этот Drawable:

testimage.setImageDrawable(getResources().getDrawable(R.layout.layer));

Решение № 2 (динамический):

Resources r = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.t);
layers[1] = r.getDrawable(R.drawable.tt);
LayerDrawable layerDrawable = new LayerDrawable(layers);
testimage.setImageDrawable(layerDrawable);

(Я не тестировал этот код, поэтому может быть ошибка, но эта общая схема должна работать.)

231
ответ дан 24 November 2019 в 05:10
поделиться

это - мое решение:

    public Bitmap Blend(Bitmap topImage1, Bitmap bottomImage1, PorterDuff.Mode Type) {

        Bitmap workingBitmap = Bitmap.createBitmap(topImage1);
        Bitmap topImage = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);

        Bitmap workingBitmap2 = Bitmap.createBitmap(bottomImage1);
        Bitmap bottomImage = workingBitmap2.copy(Bitmap.Config.ARGB_8888, true);

        Rect dest = new Rect(0, 0, bottomImage.getWidth(), bottomImage.getHeight());
        new BitmapFactory.Options().inPreferredConfig = Bitmap.Config.ARGB_8888;
        bottomImage.setHasAlpha(true);
        Canvas canvas = new Canvas(bottomImage);
        Paint paint = new Paint();

        paint.setXfermode(new PorterDuffXfermode(Type));

        paint.setFilterBitmap(true);
        canvas.drawBitmap(topImage, null, dest, paint);
        return bottomImage;
    }

использование:

imageView.setImageBitmap(Blend(topBitmap, bottomBitmap, PorterDuff.Mode.SCREEN));

или

imageView.setImageBitmap(Blend(topBitmap, bottomBitmap, PorterDuff.Mode.OVERLAY));

и результаты:

режим Overlay: Overlay mode

режим Screen: Screen mode

1
ответ дан 24 November 2019 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: