Android放大圖片查看,可旋轉屏幕,手勢放大圖片工具類。

老樣子,沒有廢話直接乾貨。

首先Activity代碼:

public class ShowImageActivity extends BaseActivity {

    @Bind(R.id.viewPager)
    ViewPager viewPager;
    @Bind(R.id.show_image_text)
    TextView showImageText;
    @Bind(R.id.iv_back)
    ImageView ivBack;
    @Bind(R.id.tv_title)
    TextView tvTitle;
    @Bind(R.id.image_text)
    TextView imageText;
    @Bind(R.id.shousuo_image)
    ImageView shousuoImage;
    @Bind(R.id.shousuo_text)
    TextView shousuoText;
    @Bind(R.id.shousuo)
    LinearLayout shousuo;
    @Bind(R.id.title_relative)
    RelativeLayout titleRelative;
    @Bind(R.id.show_popup)
    LinearLayout showPopup;
    private String context;
    JSONArray jsonArray = null;
    private JSONArray jsonContentArray;
    private int index;
    private JSONArray jsonTextArray;

    @Override
    public int getLayout() {
        return R.layout.activity_show_image;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onResume() {
        super.onResume();
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

    }

    private boolean isText = false;

    @Override
    public void initData() {
        titleRelative.setBackgroundColor(getResources().getColor(R.color.black));
        tvTitle.setText("圖片詳情");
        setWindowStatusBarColor(this, R.color.black);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        Intent intent = getIntent();
        String title = intent.getStringExtra("title");
        context = intent.getStringExtra("context");
        String json = intent.getStringExtra("json");
        String text = intent.getStringExtra("text");
        String jsonContent = intent.getStringExtra("jsonContent");
        index = intent.getIntExtra("index", -1);
        if (!TextUtils.isEmpty(text)) {
            try {
                jsonTextArray = new JSONArray(text);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        if (jsonContent != null) {
            try {
                jsonContentArray = new JSONArray(jsonContent);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        tvTitle.setText(title);
        ivBack.setVisibility(View.VISIBLE);
        ivBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                finish();
            }
        });
        ArrayList<String> arrayList = new ArrayList<>();
        if (!TextUtils.isEmpty(json)) {
            try {
                jsonArray = new JSONArray(json);

                if (jsonArray != null) {
                    if (TextUtils.isEmpty(context)) {
                        imageText.setVisibility(View.VISIBLE);
                        if (jsonTextArray != null) {
                            imageText.setText(jsonTextArray.getString(0));
                        }
                        showImageText.setText(jsonContentArray.getString(0));
                    } else {
                        imageText.setVisibility(View.GONE);
                        showImageText.setText(context + " " + 1 + "/" + jsonArray.length());
                    }
                    for (int i = 0; i < jsonArray.length(); i++) {
                        String string = jsonArray.getString(i);
                        arrayList.add(string);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        PagerAdapter pagerAdapter = new PagerAdapter(arrayList);
        viewPager.setAdapter(pagerAdapter);
        if (index != -1) {
            viewPager.setCurrentItem(index);
            if (jsonArray != null) {
                if (TextUtils.isEmpty(context)) {
                    try {
                        showImageText.setText(jsonContentArray.getString(index));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                } else {
                    showImageText.setText(context + " " + (index + 1) + "/" + jsonArray.length());

                }
            }
        }
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                // 顯示ui
                isText = false;
                titleRelative.setVisibility(View.VISIBLE);
                imageText.setVisibility(View.VISIBLE);
                showImageText.setVisibility(View.VISIBLE);
                if (jsonArray != null) {
                    if (TextUtils.isEmpty(context)) {
                        if (jsonTextArray != null) {
                            try {
                                imageText.setText(jsonTextArray.getString(position));

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                        try {
                            showImageText.setText(jsonContentArray.getString(position));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    } else {
                        showImageText.setText(context + " " + (position + 1) + "/" + jsonArray.length());
                    }
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    public static void setWindowStatusBarColor(Activity activity, int colorResId) {
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = activity.getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(activity.getResources().getColor(colorResId));


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

    float x1;
    float x2;
    float y1;
    float y2;
    boolean isMove = false;

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //當手指按下的時候
                x1 = event.getX();
                y1 = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                //當手指移動的時候
                x2 = event.getX();
                y2 = event.getY();
                if ((y1 - y2 > 50) || (y2 - y1 > 50) || (x1 - x2 > 50) || (x2 - x1 > 50)) {
                    isMove = true;
                }

                break;
            case MotionEvent.ACTION_UP:
                //當手指擡起的時候
                if (!isMove) {
                    if (isText) {
                        // 顯示ui
                        isText = false;
                        titleRelative.setVisibility(View.VISIBLE);
                        imageText.setVisibility(View.VISIBLE);
                        showImageText.setVisibility(View.VISIBLE);
                    } else {
                        // 隱藏ui
                        isText = true;
                        titleRelative.setVisibility(View.INVISIBLE);
                        imageText.setVisibility(View.INVISIBLE);
                        showImageText.setVisibility(View.INVISIBLE);
                    }
                }
                isMove = false;
                break;
        }
        return super.dispatchTouchEvent(event);

    }

    class PagerAdapter extends android.support.v4.view.PagerAdapter {

        public ArrayList<String> arrayList;

        public PagerAdapter(ArrayList<String> arrayList) {
            this.arrayList = arrayList;
        }

        @Override
        public int getCount() {
            return arrayList.size();
        }

        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
            return view == object;
        }

        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            View inflate = LayoutInflater.from(ShowImageActivity.this).inflate(R.layout.show_image_viewpager_item, null);
            PhotoView viewById = inflate.findViewById(R.id.photoView);
            RequestOptions options = new RequestOptions();
            options.placeholder(R.mipmap.zhanweitu);
            Glide.with(ShowImageActivity.this).load(arrayList.get(position)).apply(options).into(viewById);
            container.addView(inflate);
            return inflate;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }

    @Override
    protected BasePresenter onCreatePresenter() {
        return null;
    }
}

 

然後是Activity的xml:

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

    <include layout="@layout/include_header_layout"></include>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <com.example.asus.customer.weight.MyViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#000" />

        <TextView
            android:id="@+id/show_image_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_margin="20px"
            android:background="@drawable/touming_hei"
            android:padding="10px"
            android:text="周圍環境 1/10"
            android:textColor="#fff"
            android:textSize="26px" />

        <TextView
            android:id="@+id/image_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="#4b000000"
            android:paddingBottom="20px"
            android:paddingLeft="35px"
            android:paddingRight="80px"
            android:paddingTop="20px"
            android:text=""
            android:textColor="#FFFFFF"
            android:textSize="26px"
            android:visibility="visible" />

        <LinearLayout
            android:id="@+id/shousuo"
            android:layout_width="100px"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:gravity="center"
            android:orientation="vertical"
            android:paddingLeft="20px"
            android:visibility="gone">

            <ImageView
                android:id="@+id/shousuo_image"
                android:layout_width="40px"
                android:layout_height="40px"
                android:src="@drawable/shangxia_shouhui" />

            <TextView
                android:id="@+id/shousuo_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10px"
                android:layout_marginTop="10px"
                android:ems="1"
                android:text="展開"
                android:textColor="#dbdbdb"
                android:textSize="28px" />


        </LinearLayout>

    </RelativeLayout>


</LinearLayout>

當然還有ViewPager的視圖:

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

    <uk.co.senab.photoview.PhotoView
        android:id="@+id/photoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>

Activity上面傳過來了一堆參數傻眼了吧,解釋一下

adapter.setListDataCallBack(new NewGongYongAdapter.ListDataCallBack() {
    @Override
    public void setOnListDataClick(int position) {
        JSONArray jsonArray = new JSONArray();
        JSONArray jsonContent = new JSONArray();
        JSONArray josnText = new JSONArray();
        for (int i = 0; i < list.size(); i++) {
            AnLiBean.BodyBean bodyBean = list.get(i);
            String catalogName = bodyBean.getIndustryTypeName();//標題
            String filePath = bodyBean.getPreview();//圖片路徑
            String projectName = bodyBean.getProjectName();//圖片詳細介紹
            //圖片詳細介紹
            josnText.put(projectName);
            //圖片路徑
            jsonArray.put(filePath);
            //標題
            jsonContent.put(catalogName);
        }

        Intent intent = new Intent(NewQiYeActivity.this, ShowImageActivity.class);
        intent.putExtra("title", "詳細照片");
        intent.putExtra("json", jsonArray.toString());
        intent.putExtra("context", "");
        intent.putExtra("index", position);
        intent.putExtra("jsonContent", jsonContent.toString());
        intent.putExtra("text", josnText.toString());
        startActivity(intent);
    }
});

直接Copy拿走用即可。簡單粗暴!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章