2014-09-22 55 views
0

對不起,我的英語。我有一個畫廊,當你點擊一個特定的圖像時,它會出現在屏幕上。當整個屏幕上的圖片,我想要做什麼仍然可以滾動。爲此我使用ViewFlipper。 MainActivityFullScrean上的ViewFlipper圖片

public class MainAcTwo extends Activity { 

@SuppressWarnings("deprecation") 
Gallery gallery; 
ImageView bigimage; 

@SuppressWarnings("deprecation") 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.two); 
    gallery=(Gallery) findViewById(R.id.gallery); 
    gallery.setAdapter(new ImageAdapter(this)); 

    gallery.setOnItemClickListener(new OnItemClickListener() { 
     @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi") public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 

      long imageId = ImageAdapter.ThumbsIds[position]; 

      Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class); 
      fullScreenIntent.putExtra(MainAcTwo.class.getName(), imageId); 

      MainAcTwo.this.startActivity(fullScreenIntent); 

     } 
    }); 
}} 

ImageAdapter

public class ImageAdapter extends BaseAdapter implements SpinnerAdapter { 

private Context context; 

public ImageAdapter(Context context) { 
    // TODO Auto-generated constructor stub 
    this.context = context; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return ThumbsIds.length; 
} 

@Override 
public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int arg0) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup arg2) { 
    // TODO Auto-generated method stub 
    ImageView imageView=null; 
    if(convertView == null) { 
     imageView = new ImageView(context); 
     imageView.setLayoutParams(new Gallery.LayoutParams(215, 200)); 
     imageView.setPadding(8, 8, 8, 8); 


    }else { 
     imageView = (ImageView) convertView; 
    } 

    imageView.setImageResource(ThumbsIds[position]); 

    return imageView; 
} 

public static Integer[] ThumbsIds={ 
    R.drawable.abs_icla, 
    R.drawable.abs_dog, 
    R.drawable.abs_flow, 
    R.drawable.abs_neb, 
    R.drawable.abs_rad 
}; 
} 

FullScreenImage

public class FullScreenImage extends Activity { 

private ViewFlipper flipper = null; 
private float fromPosition; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.full_image); 

    Intent intent = getIntent(); 
    long imageId = (Long) intent.getExtras().get(FullScreenImage.class.getName()); 
    LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main_layout); 
    mainLayout.setOnTouchListener((OnTouchListener) this); 
    ImageView imageView = (ImageView) findViewById(R.id.imageView1); 

    imageView.setLayoutParams(new ViewFlipper.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT)); 

    imageView.setImageResource((int) imageId); 
    imageView.setScaleType(ImageView.ScaleType.FIT_XY); 

    flipper = (ViewFlipper) findViewById(R.id.fullImage); 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    flipper.showNext(); 




} 

public boolean onTouch(View view, MotionEvent event) 
{ 
    switch (event.getAction()) 
    { 
    case MotionEvent.ACTION_DOWN: 
     fromPosition = event.getX(); 
     break; 
    case MotionEvent.ACTION_UP: 
     float toPosition = event.getX(); 
     if (fromPosition > toPosition) 
      flipper.showNext(); 
     else if (fromPosition < toPosition) 
      flipper.showPrevious(); 
    default: 
     break; 
    } 
    return true; 
} 

}

在logcat的

09-22 18:49:19.941:E/AndroidRuntime(1321):致命例外:main 09-22 18:49:19.941:E/AndroidRuntime(1321): java.lang.RuntimeException:無法啓動活動 ComponentInfo {com.example.kruglick/com.example.kruglick.FullScreenImage}: 顯示java.lang.NullPointerException 09-22 18:49:19.941: E/AndroidRuntime(1321):在 android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2059) 09-22 18:49:19.941:E/AndroidRuntime(1321):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 09-22 18:49:19.941: E/AndroidRuntime(1321):在 android.app.ActivityThread.access $ 600(ActivityThread.java:130)09-22 18:49:19.941:E/AndroidRuntime(1321):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1195) 09-22 18:49:19.941:E/AndroidRuntime(1321):at android.os.Handler.dispatchMessage(Handler.java:99)09-22 18:49:19.941:E/AndroidRuntime(1321):在 android.os.Looper.loop(Looper.java:137)

我full_image.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 


     <ViewFlipper 
      android:id="@+id/fullImage" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

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

     </ViewFlipper> 


</LinearLayout> 

回答

1

其實我發現代碼中的兩個錯誤。

1)您正在使用classname「MainAcTwo.class.getName()」設置額外參數,並嘗試使用類名「FullScreenImage.class.getName()」來獲取額外的值。

變化的代碼FullScreenImage活性

long imageId = (Long) intent.getExtras().get(MainAcTwo.class.getName()); 

2)實施在 「FullScreenImage」 activty OnTouchListener接口。

做出這些更改後,您的代碼可以正常工作而不會崩潰。