自定义控件-继承ViewGroup类形式(循序渐进之第1步效果-图片左右拖动)
自定义控件---继承ViewGroup类方式(循序渐进之第1步效果----图片左右拖动)
MainActivity.java(步骤都在注释里,简单明了,就是得到图片资源,得到自定义控件,将图片放到自定义控件里,因为自定义控件是继承Viewgroup,是一个组合,需要添加东西,ok? ok!)
-----------------------下面这个效果只是整个效果的刚开始-(目前只可以左右拖动图片)---一会继续更新博客-------------------------
配置文件
activity_main.xml(不解释,只有一个自定义控件)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.mscrollview.mScrollView android:id="@+id/msv" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
MainActivity.java(步骤都在注释里,简单明了,就是得到图片资源,得到自定义控件,将图片放到自定义控件里,因为自定义控件是继承Viewgroup,是一个组合,需要添加东西,ok? ok!)
package com.example.mscrollview; import android.app.Activity; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends Activity { // 1、图片资源 private int[] ids = { R.drawable.a1, R.drawable.a2, R.drawable.a3, R.drawable.a3, R.drawable.a5, R.drawable.a6 }; // 2、定义自定义控件 private mScrollView msv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建自定义控件对象 msv = (mScrollView) findViewById(R.id.msv); // 循环遍历6张图片,依次为图片对象添加背景图片,然后加入到msv自定义控件中 for (int i = 0; i < ids.length; i++) { ImageView iv = new ImageView(this); iv.setBackgroundResource(ids[i]); //3、 添加子页面 msv.addView(iv); } } }mScrollView.java
package com.example.mscrollview; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; public class mScrollView extends ViewGroup { //定义手势识别器 private GestureDetector gestureDetector; //1、构造器 public mScrollView(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } /* * 2、得到孩子页面的位置和大小 */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { for (int i = 0; i < getChildCount(); i++) { //根据id得到孩子 View childView = getChildAt(i); //布局每个页面的位置 childView.layout(i*getWidth(), 0, getWidth()+getWidth()*i, getHeight()); } } /* * 初始化view */ private void initView(Context context) { //手势识别实例化 gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){ //手指拖动调用该方法,e1代表按下,e2代表离开事件 @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { //x轴y轴移动的距离 scrollBy((int) distanceX, 0); //事件处理完毕 return true; //scrollTo(x,y)要移动到的坐标上 } }); } /** * 接收事件onScroll */ @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event);//执行父类方法,事件不会被拦截 //接受事件 gestureDetector.onTouchEvent(event); return true; } }