2015-03-17 2 views
0

Я загружаю растровое изображение из входного потока и помещаю его в изображение. У меня есть кнопка, которая должна нарисовать круг в растровом изображении. Ошибка в том, что изображение (так называемое «касание») не найдено внутри onClickListener ... как я могу это исправить? Когда я нажимаю кнопку, ничего не происходит. (Примечание: ZoomInZoomOut класс является расширением ImageView)Android: Этот образ не найден?

try { 
     java.io.FileInputStream in = this.openFileInput(path); 
     Bitmap bitmap = BitmapFactory.decodeStream(in); 
     ZoomInZoomOut touch = (ZoomInZoomOut)findViewById(R.id.IMAGEID); 
     touch = arrangeImageView(touch); 
     touch.setImageBitmap(bitmap); 
     in.close(); 
     Button draw = (Button) findViewById(R.id.draw); 
     draw.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v) 
      { 
       Bitmap imageBitmap = Bitmap.createBitmap(200, 
        200, Bitmap.Config.ARGB_8888); 
       Canvas canvas = new Canvas(imageBitmap); 
       Paint p = new Paint(); 
       p.setAntiAlias(true); 
       p.setColor(Color.BLUE); 
       canvas.drawCircle(60, 50, 25, p); 
      /////////////////////Error is on the next line: 
       touch.setImageBitmap(imageBitmap); 
      } 
     }); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Вот XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"  android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:background="@drawable/background" 
tools:context="com.commonsware.android.test1.ImageDisplayActivity" 
> 


<com.commonsware.android.test1.ZoomInZoomOut 
    android:id="@+id/IMAGEID" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true"/> 

<Button 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="o" 
    android:id="@+id/draw" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 


</RelativeLayout> 
+0

Можете ли вы разместить свой xml как Что ж? – Swayam

+0

См. Обновленный пост. – nnnnnnitters

ответ

3

Сенсорная переменная определена в другой области. Если вы хотите больше объяснений, отметьте это link.

Чтобы исправить вашу проблему изменить код так:

final ZoomInZoomOut touch = (ZoomInZoomOut)findViewById(R.id.IMAGEID); 

Или вы также можете создать переменную в классе, если вам нужно получить доступ к нему из другого диапазона позднее:

private ZoomInZoomOut touch; 

и такие экземпляры:

touch = (ZoomInZoomOut)findViewById(R.id.IMAGEID); 
+1

Первый способ лучше, если переменная * на самом деле не нужна * класс scope – codeMagic

+1

Первый лучше, но он не позволит ему сделать линию под ней: touch = organizImageView (touch); –

+1

@ GaryBak да пропустил это, но, вероятно, лучший способ сделать то, что пытается там сделать. Я предполагаю добавить 'params' или такие – codeMagic

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