0

У меня есть линейная компоновка, у которой есть два изображения, первый из которых настроен на отображение нормального изображения, а другой скрыт, когда пользователь прикасается к 1-му изображению. 2-й вид изображения виден и установлен на полный экран. .Но при этом я получил ошибку, которая м вывешивать к вам ... я есть followed this codeSet Imageview To Full Screen of Activity

<?xml version="1.0" encoding="utf-8"?> 
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:id="@+id/liimage" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <ImageView 
       android:id="@+id/property_image" 
       android:layout_width="match_parent" 
       android:layout_height="150dp" 
       android:scaleType="matrix" 
       android:src="@drawable/house" /> 
     </LinearLayout> 
     <ImageView 
     android:id="@+id/expanded_image" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="invisible"/> 
    </LinearLayout> 
    </ScrollView> 

мой код для этого

  property_image.setImageBitmap(bmp); 
      property_image.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        zoomImageFromPhoto(property_image, property_image); 

       } 
      }); 

propertyImage мой первый образ, который отобразить мое изображение, но когда я потрогать он переходит в zoomImagefromphot о класс

 private void zoomImageFromPhoto(final View thumbView, ImageView property_image2) { 
      if (mCurrentAnimator != null) { 
       mCurrentAnimator.cancel(); 
      } 
      final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image); 
      // expandedImageView.setImageResource(property_image2); 
      final Rect startBounds = new Rect(); 
      final Rect finalBounds = new Rect(); 
      final Point globalOffset = new Point(); 
      thumbView.getGlobalVisibleRect(startBounds); 
      findViewById(R.id.liimage).getGlobalVisibleRect(finalBounds, globalOffset); 
      startBounds.offset(-globalOffset.x, -globalOffset.y); 
      finalBounds.offset(-globalOffset.x, -globalOffset.y); 
      float startScale; 
      if ((float) finalBounds.width()/finalBounds.height() 
        > (float) startBounds.width()/startBounds.height()) { 
       startScale = (float) startBounds.height()/finalBounds.height(); 
       float startWidth = startScale * finalBounds.width(); 
       float deltaWidth = (startWidth - startBounds.width())/2; 
       startBounds.left -= deltaWidth; 
       startBounds.right += deltaWidth; 
      } else { 
       startScale = (float) startBounds.width()/finalBounds.width(); 
       float startHeight = startScale * finalBounds.height(); 
       float deltaHeight = (startHeight - startBounds.height())/2; 
       startBounds.top -= deltaHeight; 
       startBounds.bottom += deltaHeight; 
      } 
      thumbView.setAlpha(0f); 
      expandedImageView.setVisibility(View.VISIBLE); 
      expandedImageView.setPivotX(0f); 
      expandedImageView.setPivotY(0f); 
      AnimatorSet set = new AnimatorSet(); 
      set 
        .play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left, 
          finalBounds.left)) 
        .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top, 
          finalBounds.top)) 
        .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, startScale, 1f)) 
        .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, startScale, 1f)); 
      set.setDuration(mShortAnimationDuration); 
      set.setInterpolator(new DecelerateInterpolator()); 
      set.addListener(new AnimatorListenerAdapter() { 
       @Override 
       public void onAnimationEnd(Animator animation) { 
        mCurrentAnimator = null; 
       } 

       @Override 
       public void onAnimationCancel(Animator animation) { 
        mCurrentAnimator = null; 
       } 
      }); 
      set.start(); 
      mCurrentAnimator = set; 
      final float startScaleFinal = startScale; 
      expandedImageView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if (mCurrentAnimator != null) { 
         mCurrentAnimator.cancel(); 
        } 
        AnimatorSet set = new AnimatorSet(); 
        set 
          .play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left)) 
          .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top)) 
          .with(ObjectAnimator 
            .ofFloat(expandedImageView, View.SCALE_X, startScaleFinal)) 
          .with(ObjectAnimator 
            .ofFloat(expandedImageView, View.SCALE_Y, startScaleFinal)); 
        set.setDuration(mShortAnimationDuration); 
        set.setInterpolator(new DecelerateInterpolator()); 
        set.addListener(new AnimatorListenerAdapter() { 
         @Override 
         public void onAnimationEnd(Animator animation) { 
          thumbView.setAlpha(1f); 
          expandedImageView.setVisibility(View.GONE); 
          mCurrentAnimator = null; 
         } 

         @Override 
         public void onAnimationCancel(Animator animation) { 
          thumbView.setAlpha(1f); 
          expandedImageView.setVisibility(View.GONE); 
          mCurrentAnimator = null; 
         } 
        }); 
        set.start(); 
        mCurrentAnimator = set; 
       } 
      }); 
     } 

, но я получил ошибку как

04-06 11:02:31.649: E/AndroidRuntime(2739): Process: com.big_property, PID: 2739 
04-06 11:02:31.649: E/AndroidRuntime(2739): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.View.getGlobalVisibleRect(android.graphics.Rect,  android.graphics.Point)' on a null object reference 
04-06 11:02:31.649: E/AndroidRuntime(2739):at com.big_property.search_property_activity.zoomImageFromPhoto(search_property_ activity.java:284) 
04-06 11:02:31.649: E/AndroidRuntime(2739):at com.big_property.search_property_activity.access$4(search_property_activity.java:274) 
04-06 11:02:31.649: E/AndroidRuntime(2739):at com.big_property.search_property_activity$3.onClick(search_property_activity.java:268) 

Я думаю EROR в этой линии

findViewById(R.id.liimage).getGlobalVisibleRect(finalBounds, globalOffset); 

Как решить эту проблему? Помогите мне поблагодарить меня заранее.

+0

Help Me Frienif кто-нибудь знает, как решить это, тогда поздно, я знаю, если кто-нибудь знает, что он не найдет мой личный идентификатор макета .... – Tufan

+0

Пожалуйста, исправьте меня, если я неправильно понял. Я думаю вы хотите показать большое изображение, когда пользователь нажимает на изображение маленького значка на одном экране с альфа-анимацией? Правильно ли я? – Srinivasan

+0

пишите @Srinivasan так, как это сделать – Tufan

ответ

0

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

+0

Но нет необходимости реализовывать другие фрагменты/действия ... мы можем сделать это в одном и том же действии – Tufan

+0

Смотрите это: http://stackoverflow.com/questions/27277337/how-to -display-an-image-in-full-screen-on-click-in-the-imageview –

2

Вместо zoomImageFromPhoto (окончательный View ThumbView, ImageView property_image2) использование zoomImageFromPhoto (окончательный View ThumbView, внутр property_image2) и после этого не забудьте сделать expandedImageView.setImageResource (property_image2);

Изменения, которые должны быть сделаны следующие ... Надеюсь, что это поможет

public class MainActivity extends Activity implements OnClickListener { 

ImageView property_image; 
private Animator mCurrentAnimator; 
private int mShortAnimationDuration; 

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

    property_image=(ImageView) findViewById(R.id.property_image); 
    Bitmap bmp=BitmapFactory.decodeResource(this.getResources(), 
      R.drawable.desert); 
    property_image.setImageBitmap(bmp); 
    mShortAnimationDuration = getResources().getInteger(
      android.R.integer.config_shortAnimTime); 

    property_image.setOnClickListener(this); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    zoomImageFromPhoto(property_image, R.drawable.desert); 
} 

private void zoomImageFromPhoto(final View thumbView, int property_image2) { 
    if (mCurrentAnimator != null) { 
     mCurrentAnimator.cancel(); 
    } 
    final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image); 
    // expandedImageView.setImageResource(property_image2); 

    final Rect startBounds = new Rect(); 
    final Rect finalBounds = new Rect(); 
    final Point globalOffset = new Point(); 
    thumbView.getGlobalVisibleRect(startBounds); 
    findViewById(R.id.liimage).getGlobalVisibleRect(finalBounds, globalOffset); 
    startBounds.offset(-globalOffset.x, -globalOffset.y); 
    finalBounds.offset(-globalOffset.x, -globalOffset.y); 
    float startScale; 
    if ((float) finalBounds.width()/finalBounds.height() 
      > (float) startBounds.width()/startBounds.height()) { 
     startScale = (float) startBounds.height()/finalBounds.height(); 
     float startWidth = startScale * finalBounds.width(); 
     float deltaWidth = (startWidth - startBounds.width())/2; 
     startBounds.left -= deltaWidth; 
     startBounds.right += deltaWidth; 
    } else { 
     startScale = (float) startBounds.width()/finalBounds.width(); 
     float startHeight = startScale * finalBounds.height(); 
     float deltaHeight = (startHeight - startBounds.height())/2; 
     startBounds.top -= deltaHeight; 
     startBounds.bottom += deltaHeight; 
    } 
    thumbView.setAlpha(0f); 
    expandedImageView.setVisibility(View.VISIBLE); 
    expandedImageView.setPivotX(0f); 
    expandedImageView.setPivotY(0f); 
    expandedImageView.setImageResource(property_image2); 
    AnimatorSet set = new AnimatorSet(); 
    set 
      .play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left, 
        finalBounds.left)) 
      .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top, 
        finalBounds.top)) 
      .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, startScale, 1f)) 
      .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, startScale, 1f)); 
    set.setDuration(mShortAnimationDuration); 
    set.setInterpolator(new DecelerateInterpolator()); 
    set.addListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationEnd(Animator animation) { 
      mCurrentAnimator = null; 
     } 

     @Override 
     public void onAnimationCancel(Animator animation) { 
      mCurrentAnimator = null; 
     } 
    }); 
    set.start(); 
    mCurrentAnimator = set; 
    final float startScaleFinal = startScale; 
    expandedImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mCurrentAnimator != null) { 
       mCurrentAnimator.cancel(); 
      } 
      AnimatorSet set = new AnimatorSet(); 
      set 
        .play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left)) 
        .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top)) 
        .with(ObjectAnimator 
          .ofFloat(expandedImageView, View.SCALE_X, startScaleFinal)) 
        .with(ObjectAnimator 
          .ofFloat(expandedImageView, View.SCALE_Y, startScaleFinal)); 
      set.setDuration(mShortAnimationDuration); 
      set.setInterpolator(new DecelerateInterpolator()); 
      set.addListener(new AnimatorListenerAdapter() { 
       @Override 
       public void onAnimationEnd(Animator animation) { 
        thumbView.setAlpha(1f); 
        expandedImageView.setVisibility(View.GONE); 
        mCurrentAnimator = null; 
       } 

       @Override 
       public void onAnimationCancel(Animator animation) { 
        thumbView.setAlpha(1f); 
        expandedImageView.setVisibility(View.GONE); 
        mCurrentAnimator = null; 
       } 
      }); 
      set.start(); 
      mCurrentAnimator = set; 
     } 
    }); 
} 

}

+0

это может быть правильно, но мое изображение задано во время выполнения ... поэтому я могу отправить изображение direclty в imageview ... и даже вы сказали, что мне нужно отправить идентификатор изображения, если я установил его во время выполнения, это мне не помогло ..... – Tufan

+0

nd if i follw you ... у меня есть ошибка logcat – Tufan

+0

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

0

Пожалуйста, найдите макетирование,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <ImageView 
     android:id="@+id/img_small_icon" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:background="@drawable/ic_launcher" 
     android:layout_centerInParent="true"/> 

    <ImageView 
     android:id="@+id/img_large_icon" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/ic_launcher" 
     android:layout_centerInParent="true" 
android:visibility="invisible"/> 

И добавьте клик для маленького значка «img_small_icon». напра:

ImageView imgSmall,imgLarge; 
imgSmall = (ImageView) findViewById(R.id.img_small_icon); 
     imgLarge = (ImageView) findViewById(R.id.img_large_icon); 
     imgSmall.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       if(imgLarge.getVisibility() == View.INVISIBLE){ 
//Here you can add the Fade In/Out animation start 
        imgLarge.setVisibility(View.VISIBLE); 

       } 
      } 
     }); 

Надеется, что это поможет you.Please дайте мне знать, если вы нашли какую-либо трудность.

Обновлено:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true"> 
    <alpha 
     android:duration="500" 
     android:fromAlpha="5.0" 
     android:toAlpha="5.0"/> 

</set> 

сохранить этот файл в вытяжке fodler.

В вашей onClickListener

Animation fadeOutAnimation = AnimationUtils.loadAnimation(mContext, R.anim.fade_out); 
imgLarge.startAnimation(fadeOutAnimation); 
+0

это правильный shrinivas, но он доцент отображения на полном экране .... да, это полно, но не на полном screeen ... – Tufan

+0

Я думаю, вы хотите удалить строку заголовка вашего приложения? Или макет полностью не покрыт .... – Srinivasan

+0

макет полностью не покрывает @Srinivasan – Tufan

0

Там нет необходимости делать такой длительный процесс ..просто это сделать вам нужно XML-класс

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<ImageView 
    android:id="@+id/img_large_icon" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

затем преобразовать этот файл в массив байтов

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
    byteArray = stream.toByteArray(); 

когда нажмите на фотографии отправить этот байтовый массив с помощью намерения

intent.putExtra("Image", byteArray); 

делать другие виды деятельности

это будет переход к следующему деятельности

писать этот код

public class Image_fullscreen_activity extends Activity { 
    private Bitmap bmp; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.fullscreen_image); 
    byte[] byteArray = getIntent().getByteArrayExtra("Image"); 
    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
    ImageView iv=(ImageView)findViewById(R.id.img_large_icon); 
    iv.setImageBitmap(bmp); 
    } 
@Override 
public void onBackPressed() { 
     super.onBackPressed(); 
     } 

} 

-й в вашем андроида mainfiest зарегистрировать этот

<activity 
     android:name=".Image_fullscreen_activity" 
     android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 
     android:label="@string/app_name" > 
    </activity> 

Просто сделай это, вы получите точный результат