一张图片实现滚动

来源:互联网 发布:mac yosemite dmg下载 编辑:程序博客网 时间:2024/04/28 14:08

有一张比较大的图片,比如长宽都是屏幕的两倍大小,实现的功能是首先将图片居中显示,由于图片太大显然只能显示一部分,然后可以通过拖动,实现图片的平滑滚动(既看不出来滚动刷新痕迹)。


使用imageView配合onTouch事件,可以解决。


关键代码:


       布局文件中imageView控件如下


[html] <span style="font-size:16px;"><ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/img" 
    android:scaleType="center" 
    android:background="#fff" 
    android:src="@drawable/picName" 
/> 
</span> 
<span style="font-size:16px;"><ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/img"
    android:scaleType="center"
    android:background="#fff"
    android:src="@drawable/picName"
/>
</span>


 




       Activity文件中主要代码如下


 


[java] <span style="font-size:16px;">@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
 
    setContentView(R.layout.xml_name_layout); 
 
    final ImageView switcherView = (ImageView) this.findViewById(R.id.img); 
 
    switcherView.setOnTouchListener(new View.OnTouchListener() { 
 
        public boolean onTouch(View arg0, MotionEvent event) { 
 
            float curX, curY; 
 
            switch (event.getAction()) { 
 
                case MotionEvent.ACTION_DOWN: 
                    mx = event.getX(); 
                    my = event.getY(); 
                    break; 
                case MotionEvent.ACTION_MOVE: 
                    curX = event.getX(); 
                    curY = event.getY(); 
                    switcherView.scrollBy((int) (mx - curX), (int) (my - curY)); 
                    mx = curX; 
                    my = curY; 
                    break; 
                case MotionEvent.ACTION_UP: 
                    curX = event.getX(); 
                    curY = event.getY(); 
                    switcherView.scrollBy((int) (mx - curX), (int) (my - curY)); 
                    break; 
            } 
 
            return true; 
        } 
    }); 
 

</span> 
<span style="font-size:16px;">@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.xml_name_layout);


    final ImageView switcherView = (ImageView) this.findViewById(R.id.img);


    switcherView.setOnTouchListener(new View.OnTouchListener() {


        public boolean onTouch(View arg0, MotionEvent event) {


            float curX, curY;


            switch (event.getAction()) {


                case MotionEvent.ACTION_DOWN:
                    mx = event.getX();
                    my = event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    curX = event.getX();
                    curY = event.getY();
                    switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
                    mx = curX;
                    my = curY;
                    break;
                case MotionEvent.ACTION_UP:
                    curX = event.getX();
                    curY = event.getY();
                    switcherView.scrollBy((int) (mx - curX), (int) (my - curY));
                    break;
            }


            return true;
        }
    });


}
</span>