Android仿微信朋友圈查看頁面

blog出處:http://blog.csdn.net/allen315410/article/details/40264551

添加權(quán)限
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
圖片查看器實(shí)現(xiàn)的圖片的縮放效果使用的是開源組件PhotoView

地址:https://github.com/chrisbanes/PhotoView

compile 'com.github.chrisbanes:PhotoView:1.3.0'
布局代碼
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent" >  
  
    <com.example.imagedemo.HackyViewPager  
        android:id="@+id/pager"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:background="@android:color/black" />  
  
    <TextView  
        android:id="@+id/indicator"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:layout_gravity="bottom"  
        android:background="@android:color/transparent"  
        android:gravity="center"  
        android:text="@string/viewpager_indicator"  
        android:textColor="@android:color/white"  
        android:textSize="18sp" />  
  
</FrameLayout>  
HeckyViewpager
public class HackyViewPager extends ViewPager {  
  
    private static final String TAG = "HackyViewPager";  
  
    public HackyViewPager(Context context) {  
        super(context);  
    }  
  
    public HackyViewPager(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    @Override  
    public boolean onInterceptTouchEvent(MotionEvent ev) {  
        try {  
            return super.onInterceptTouchEvent(ev);  
        } catch (IllegalArgumentException e) {  
            // 不理會  
            Log.e(TAG, "hacky viewpager error1");  
            return false;  
        } catch (ArrayIndexOutOfBoundsException e) {  
            // 不理會  
            Log.e(TAG, "hacky viewpager error2");  
            return false;  
        }  
    }  
  
}  
圖片查看器

就是一個activity

/** 
 * 圖片查看器 
 */  
public class ImagePagerActivity extends FragmentActivity {  
    private static final String STATE_POSITION = "STATE_POSITION";  
    public static final String EXTRA_IMAGE_INDEX = "image_index";  
    public static final String EXTRA_IMAGE_URLS = "image_urls";  
  
    private HackyViewPager mPager;  
    private int pagerPosition;  
    private TextView indicator;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.image_detail_pager);  
  
        pagerPosition = getIntent().getIntExtra(EXTRA_IMAGE_INDEX, 0);  
        ArrayList<String> urls = getIntent().getStringArrayListExtra(  
                EXTRA_IMAGE_URLS);  
  
        mPager = (HackyViewPager) findViewById(R.id.pager);  
        ImagePagerAdapter mAdapter = new ImagePagerAdapter(  
                getSupportFragmentManager(), urls);  
        mPager.setAdapter(mAdapter);  
        indicator = (TextView) findViewById(R.id.indicator);  
  
        CharSequence text = getString(R.string.viewpager_indicator, 1, mPager  
                .getAdapter().getCount());  
        indicator.setText(text);  
        // 更新下標(biāo)  
        mPager.setOnPageChangeListener(new OnPageChangeListener() {  
  
            @Override  
            public void onPageScrollStateChanged(int arg0) {  
            }  
  
            @Override  
            public void onPageScrolled(int arg0, float arg1, int arg2) {  
            }  
  
            @Override  
            public void onPageSelected(int arg0) {  
                CharSequence text = getString(R.string.viewpager_indicator,  //  %1$d/%2$d,%1$d表示需要替換的第一個整形內(nèi)容
                        arg0 + 1, mPager.getAdapter().getCount());  
                indicator.setText(text);  
            }  
  
        });  
        if (savedInstanceState != null) {  
            pagerPosition = savedInstanceState.getInt(STATE_POSITION);  
        }  
  
        mPager.setCurrentItem(pagerPosition);  
    }  
  
    @Override  
    public void onSaveInstanceState(Bundle outState) {  
        outState.putInt(STATE_POSITION, mPager.getCurrentItem());  
    }  
  
    private class ImagePagerAdapter extends FragmentStatePagerAdapter {  
  
        public ArrayList<String> fileList;  
  
        public ImagePagerAdapter(FragmentManager fm, ArrayList<String> fileList) {  
            super(fm);  
            this.fileList = fileList;  
        }  
  
        @Override  
        public int getCount() {  
            return fileList == null ? 0 : fileList.size();  
        }  
  
        @Override  
        public Fragment getItem(int position) {  
            String url = fileList.get(position);  
            return ImageDetailFragment.newInstance(url);  
        }  
  
    }  
}  

圖片界面為fragment

圖片界面

image_detail_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:layout_centerInParent="true"
        android:contentDescription="@string/app_name"
        android:scaleType="centerCrop" />

    <ProgressBar
        android:id="@+id/loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="gone" />

</RelativeLayout>
圖片界面代碼
/** 
 * 單張圖片顯示Fragment 
 */  
public class ImageDetailFragment extends Fragment {  
    private String mImageUrl;  
    private ImageView mImageView;  
    private ProgressBar progressBar;  
    private PhotoViewAttacher mAttacher;  
  
    public static ImageDetailFragment newInstance(String imageUrl) {  
        final ImageDetailFragment f = new ImageDetailFragment();  
  
        final Bundle args = new Bundle();  
        args.putString("url", imageUrl);  
        f.setArguments(args);  
  
        return f;  
    }  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        mImageUrl = getArguments() != null ? getArguments().getString("url")  
                : null;  
    }  
  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
            Bundle savedInstanceState) {  
        final View v = inflater.inflate(R.layout.image_detail_fragment,  
                container, false);  
        mImageView = (ImageView) v.findViewById(R.id.image);  
        mAttacher = new PhotoViewAttacher(mImageView);  
  
        mAttacher.setOnPhotoTapListener(new OnPhotoTapListener() {  
  
            @Override  
            public void onPhotoTap(View arg0, float arg1, float arg2) {  
                getActivity().finish();  
            }  
        });  
  
        progressBar = (ProgressBar) v.findViewById(R.id.loading);  
        return v;  
    }  
  
    @Override  
    public void onActivityCreated(Bundle savedInstanceState) {  
        super.onActivityCreated(savedInstanceState);  
  
       Glide.with(this).load(mImageUrl).into(mImageView);//采用Glide框架
    }  
}  
點(diǎn)擊實(shí)現(xiàn)
ArrayList<String> imageUrls = new ArrayList<>();
//添加數(shù)據(jù)
......
gridview的布局與初始化省略:
// 點(diǎn)擊回帖九宮格,查看大圖  
        gridview.setOnItemClickListener(new OnItemClickListener() {  
  
            @Override  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                // TODO Auto-generated method stub  
                imageBrower(position, imageUrls);  
            }  
        });  

imageBrower(int position, ArrayList<String> imageUrls) 如下所示

/** 
     * 打開圖片查看器 
     *  
     * @param position 
     * @param urls2 
     */  
    protected void imageBrower(int position, ArrayList<String> urls2) {  
        Intent intent = new Intent(mContext, ImagePagerActivity.class);  
        // 圖片url,為了演示這里使用常量,一般從數(shù)據(jù)庫中或網(wǎng)絡(luò)中獲取  
        intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_URLS, urls2);  
        intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_INDEX, position);  
        mContext.startActivity(intent);  
    }  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懒熙,一起剝皮案震驚了整個濱河市褐隆,隨后出現(xiàn)的幾起案子台猴,更是在濱河造成了極大的恐慌森渐,老刑警劉巖趾娃,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椅文,死亡現(xiàn)場離奇詭異喂很,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)皆刺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門少辣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人羡蛾,你說我怎么就攤上這事漓帅。” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵忙干,是天一觀的道長器予。 經(jīng)常有香客問我,道長捐迫,這世上最難降的妖魔是什么乾翔? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮施戴,結(jié)果婚禮上反浓,老公的妹妹穿的比我還像新娘。我一直安慰自己赞哗,他們只是感情好雷则,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懈玻,像睡著了一般巧婶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涂乌,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天艺栈,我揣著相機(jī)與錄音,去河邊找鬼湾盒。 笑死湿右,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罚勾。 我是一名探鬼主播毅人,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尖殃!你這毒婦竟也來了丈莺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤送丰,失蹤者是張志新(化名)和其女友劉穎缔俄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體器躏,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俐载,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了登失。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遏佣。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖揽浙,靈堂內(nèi)的尸體忽然破棺而出状婶,到底是詐尸還是另有隱情意敛,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布太抓,位于F島的核電站空闲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏走敌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一逗噩、第九天 我趴在偏房一處隱蔽的房頂上張望掉丽。 院中可真熱鬧,春花似錦异雁、人聲如沸捶障。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽项炼。三九已至,卻和暖如春示绊,著一層夾襖步出監(jiān)牢的瞬間锭部,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工面褐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拌禾,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓展哭,卻偏偏與公主長得像湃窍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匪傍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容