2017-01-19 1 views
0

Итак, у 1 есть 2 ImageButtons, clothesButton1 с изображением, объявленным в xml, и imageButton2, который пуст. Оба находятся в отдельной деятельности. После нажатия clothesButton1, я хочу переместить изображение в clothesButton1 в imageButton2 с использованием растрового изображения. одеждаButton1 станет пустой после.Перемещение изображения между ImageButtons в отдельном режиме OnClick Bitmap

Вот мой код в Java для clothesButton1:

final ImageButton clothesButton1 =(ImageButton)findViewById(R.id.clothesBtn1); 

clothesButton1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      clothesButton1.buildDrawingCache(); 
      Bitmap bitmapclothes = clothesButton1.getDrawingCache(); 
      Intent intent = new Intent(); 
      intent.putExtra("BitmapClothes", bitmapclothes); 
     } 
    }); 

В моей второй деятельности (для imageButton2):

final ImageButton imageButton2 = (ImageButton)findViewById(R.id.imageButton2); 
Intent intent = getIntent(); 
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapClothes"); 
imageButton2.setImageBitmap(bitmap); 

Однако функции перемещения не работает, и я действительно понятия не имею, где Я не прав. Любая помощь приветствуется.

ответ

0

Ошибка из-за Намерения. В андроиде есть явные и неявные намерения. Когда вы создаете намерение с контекстом и объект класса, вы создаете явное намерение. Вы используете явные намерения для запуска действий в вашем приложении. Когда активность в вашем приложении хочет начать работу в другом приложении, вы создаете неявное намерение. В вашем случае это Явное намерение использует Intent intent = new Intent (getApplicationContext(), secondActivityName.class). В вашем случае

Intent intent=new Intent(getApplicationContext(),secondActivityName.class); 
intent.putExtra("BitmapClothes", bitmapclothes); 
startActivity(intent); 

Чтобы понять больше о намерениях read this tutorial.

+0

Большое спасибо за объяснение и помощь! Тем не менее, я попытался использовать getContext(), но «невозможно разрешить метод». Поэтому я использовал getApplicationContext() вместо этого, чтобы он работал. Надеюсь, это не означает большой разницы для приложения. – xlayer

+0

да, ваше право рад, что это поможет! – Yirga

0

Во-первых, getDrawingCache() возвращает null; второй способ, которым вы ссылаетесь на другую деятельность, неверен! попробовать это:

clothesButton1.setDrawingCacheEnabled(true); 
clothesButton1.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
clothesButton1.layout(0, 0, clothesButton1.getMeasuredWidth(), imageButton.getMeasuredHeight()); 
clothesButton1.buildDrawingCache(true); 
Bitmap bitmapclothes = Bitmap.createBitmap(clothesButton1.getDrawingCache()); 
clothesButton1.setDrawingCacheEnabled(false); 
Intent intent = new Intent(NowActivity.this,SecondActivity.class); 
intent.putExtra("BitmapClothes", bitmapclothes); 
startActivity(intent); 

Ссылка: Android View.getDrawingCache returns null, only null

+0

Благодарим вас за пояснения и подробный код! Конечно, узнал что-то новое о DrawingCache. Ваш код работает для меня, но он немного длиннее моего нового решения. Будет ли продвигаться в случае, если другим людям, возможно, понадобится использовать его в будущем? – xlayer

+0

Это лучший способ использовать DrawingCache, вы также можете нарисовать представление на холсте самостоятельно, как второе решение в ссылке, которое также может решить вашу проблему! –

0

Я думаю, что вы можете добиться этого легко с Activity Transition. Взгляните на это :) Раздел Start an activity with a shared element может быть тем, что вы хотите.

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