6

我目前正在使用 TouchImageView 来允许放大和缩小,但现在,我还需要一个使用图像视图的 View Pager。我如何将这两者合并在一起?我必须夸大布局吗?

这是我的浏览器

public class Main extends FragmentActivity implements AdapterView.OnItemSelectedListener, ViewPager.OnPageChangeListener{
    private ViewPager viewPager;
    String[] mImageIds;
    private Handler handler;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        displayImage();
        viewPager = (ViewPager) findViewById(R.id.view_pager);
        viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
        viewPager.setOnPageChangeListener(this);
        //gallery = (Gallery) findViewById(R.id.gallery);
        //gallery.setAdapter(new ImageAdapter());
        //gallery.setOnItemSelectedListener(this);

        //textView = (TextView) findViewById(R.id.title);

        handler = new Handler();

    }

    public void displayImage()
    {
        ArrayList<String>  mStringList= new ArrayList<String>();
        File strPath = new File(Environment.getExternalStorageDirectory() + "/Covers");
        int lists = strPath.listFiles().length; 
        Log.d("number of items in array ",String.valueOf(lists));

        File yourDir = new File(strPath, "");
        for (File f : yourDir.listFiles()) {
            if (f.isFile())
            {
                String name = f.getName();
                String v = strPath + "/" + name;
                mStringList.add(v);
            }
        }

        mImageIds = new String[mStringList.size()];
        mImageIds = mStringList.toArray(mImageIds);

        for(int i = 0; i < mImageIds.length ; i++){
            //Log.d("string is",(mImageIds[i]));
        }
    }

    // gallery item selected
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        updateUI(i);
    }

    // view pager item selected
    public void onPageSelected(int i) {
        updateUI(i);
    }

    private void updateUI(final int i) {
        handler.post(new Runnable() {
            public void run() {
                //gallery.setSelection(i);
                viewPager.setCurrentItem(i);
                ///textView.setText("Photo #" + i);
            }
        });
    }

    public void onNothingSelected(AdapterView<?> adapterView) {    }

    public void onPageScrolled(int i, float v, int i1) {    }

    public void onPageScrollStateChanged(int i) {    }

    public class ImageAdapter extends BaseAdapter implements OnTouchListener {

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            ImageView imageView = new ImageView(Main.this);
            imageView.setOnTouchListener(this);
            imageView.setImageDrawable(Drawable.createFromPath(mImageIds[position]));
            imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);

            return imageView;
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            return false;
        }


    }

    public class EnableDisableViewPager extends ViewPager {

        private boolean enabled = true;

        public EnableDisableViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent arg0) {
            if(enabled)
                return super.onInterceptTouchEvent(arg0);

            return false;
        }

        public boolean isEnabled() {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }
    }

    public class MyAdapter extends FragmentPagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return mImageIds.length;
        }

        @Override
        public Fragment getItem(final int position) {
            return new Fragment() {
                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                    ImageView imageView = new ImageView(Main.this);
                    imageView.setImageDrawable(Drawable.createFromPath(mImageIds[position]));
                    return imageView;
                }
            };
        }
    }

}

及其xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <FrameLayout android:layout_height="0px"
                 android:layout_width="fill_parent"
                 android:layout_weight="1"
            >

        <android.support.v4.view.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="10dip" />

    </FrameLayout>
</LinearLayout>
4

1 回答 1

0
  1. 创建一个 FragmentActivity,其布局由 View Pager 组成。
  2. 添加一个 Fragment foreach 图像,其布局由 TouchImageView 组成。
  3. 将这些片段列表添加到查看寻呼机。而已。捏缩放和寻呼机都有效。

像这样:

@Override
protected void onStart() {

super.onStart();

List<Fragment> fragments = new Vector<Fragment>();

String url1 =  "someurl1.jpg";
Bundle Image1 = new Bundle();
Image1.putString("image_url", url1);
fragments.add(Fragment.instantiate(this, ZoomImageFragment.class.getName(),Image1));


String url2 = "someurl2.jpg";
Bundle Image2 = new Bundle();
Image2.putString("image_url", url2);
fragments.add(Fragment.instantiate(this, ZoomImageFragment.class.getName(),Image2));


//and so on.


this.mPagerAdapter  = new PagerAdapter(super.getSupportFragmentManager(), fragments);
mPager = (ViewPager) findViewById(R.id.pager);
mPager.animate();
mPager.setAdapter(this.mPagerAdapter);

}
于 2013-01-11T09:03:10.870 回答