3

onCreate() で最初にイメージビューをファイルのリストの最初のイメージに設定したいが、ImageViews の幅と高さを使用して、前後に反転するとイメージが ImageViews に設定されるという問題があります。寸法は問題ありませんが、onCreate() では IllegalArgumentException の幅と高さが 0 より大きくなければなりません。あなたの時間

    public class ViewFlipperActivity extends Activity {

   ViewFlipper page;

   Animation animFlipInForeward;
   Animation animFlipOutForeward;
   Animation animFlipInBackward;
   Animation animFlipOutBackward;
   String[] imagefiles;
   File file = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), "how");
   int filescount,nowcount;
   ImageView image;
   Matrix matrix;
   Bitmap d;

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   imagefiles = file.list();
   filescount = imagefiles.length;
   nowcount = 0;
   matrix = new Matrix();
   matrix.postRotate(90);
   page = (ViewFlipper)findViewById(R.id.flipper);
   image = (ImageView)findViewById(R.id.zero);

   animFlipInForeward = AnimationUtils.loadAnimation(this, R.anim.left_in);
   animFlipOutForeward = AnimationUtils.loadAnimation(this, R.anim.left_out);
   animFlipInBackward = AnimationUtils.loadAnimation(this, R.anim.right_in);
   animFlipOutBackward = AnimationUtils.loadAnimation(this, R.anim.right_out);
   start();
   }
   private void start(){
   d = BitmapFactory.decodeFile(file.toString() +"/" + imagefiles[nowcount]);

   d = Bitmap.createBitmap(d, 0, 0, d.getWidth(), d.getHeight(), matrix, true);
   System.gc();
   d = Bitmap.createScaledBitmap(d, image.getWidth(), image.getHeight(), true);
   System.gc();
   image.setImageBitmap(d);
   System.gc();
   }

   private void SwipeRight(){
   page.setInAnimation(animFlipInBackward);
   page.setOutAnimation(animFlipOutBackward);
   nowcount--;
   if(nowcount < 0)
 nowcount = filescount - 1;
   d = BitmapFactory.decodeFile(file.toString() +"/" + imagefiles[nowcount]);

   d = Bitmap.createBitmap(d, 0, 0, d.getWidth(), d.getHeight(), matrix, true);
   System.gc();
   d = Bitmap.createScaledBitmap(d, image.getWidth(), image.getHeight(), true);
   System.gc();
   image.setImageBitmap(d);
   System.gc();

   page.showPrevious();
   Log.d("show previous", "exe");
   }

   private void SwipeLeft(){
   page.setInAnimation(animFlipInForeward);
   page.setOutAnimation(animFlipOutForeward);
   nowcount++;
   if(nowcount > 3)
 nowcount = 0;
   d = BitmapFactory.decodeFile(file.toString() +"/" + imagefiles[nowcount]);

   d = Bitmap.createBitmap(d, 0, 0, d.getWidth(), d.getHeight(), matrix, true);
   System.gc();
   d = Bitmap.createScaledBitmap(d, image.getWidth(), image.getHeight(), true);
   System.gc();
   image.setImageBitmap(d);
   System.gc();
   page.showNext();
   Log.d("show next", "exe");
   }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
   // TODO Auto-generated method stub
  return gestureDetector.onTouchEvent(event);
  }

  SimpleOnGestureListener simpleOnGestureListener
  = new SimpleOnGestureListener(){

  @Override
   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  float velocityY) {

  float sensitvity = 50;
  if((e1.getX() - e2.getX()) > sensitvity){
   SwipeLeft();
  }else if((e2.getX() - e1.getX()) > sensitvity){
  SwipeRight();
  }

  return true;
  }

  };

  GestureDetector gestureDetector
  = new GestureDetector(simpleOnGestureListener);
  }
4

1 に答える 1

3

イメージ ビューの高さと幅は、親ビューのレイアウトが要求されたときにのみ計算されますonCreateOnGlobalLayoutListenerを実装し、そこから imageview の高さと幅を取得する必要があります。そこに画像をロードするべきではありませんがAsyncTask、バックグラウンドでロードするために何らかの方法を使用してください。

于 2013-02-25T19:18:57.090 に答える