码迷,mamicode.com
首页 > 其他好文 > 详细

View的事件体系

时间:2017-12-13 14:20:01      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:body   ima   基于   指定   des   bottom   public   esc   ntop   

1、什么是View

  View是Android中所有控件的基类,还有ViewGroup,翻译是控件组,ViewGroup也是继承了View,所以其实ViewGroup本身是一个控件只是其内部可能包含了许多控件。

 

2、View的位置参数

  • top 左上角的纵坐标
  • left 左上角的横坐标
  • bottom 右下角的纵坐标
  • right 右下角的横坐标

  需要注意的是这些参数都是基于父容器来说的,并不是屏幕。

  这是布局xml:

技术分享图片
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <TextView
        android:id="@+id/view_ima1"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_marginLeft="50dp"
        android:layout_marginTop="50dp"
        android:background="@color/colorPrimary"/>
    
    <Button
        android:id="@+id/view_button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"/>

</RelativeLayout>
View Code

  技术分享图片

  然后是Activity的Java代码:

技术分享图片
public class ViewActivity extends AppCompatActivity {

    private final static String TAG = "ViewActivity";
    private TextView textView;
    private Button button;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);
        textView = (TextView) findViewById(R.id.view_ima1);
        button = (Button) findViewById(R.id.view_button1);
        
        //打印信息
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d(TAG,"textView_top = " + textView.getTop());
                Log.d(TAG,"textView_left = " + textView.getLeft());
                Log.d(TAG,"textView_bottom = " + textView.getBottom());
                Log.d(TAG,"textView_right = " + textView.getRight());
            }
        });
    }
}
View Code

  这里要注意的是不能直接在onCreate中使用getLeft, getRight, getTop, getBottom,这样直接使用返回的结果将是0,因为View的绘制晚于Activity的创建。

  然后还要注意dp和像素的区别。不同的手机不一样。

  从Android3.0开始,View在平移的过程中,top和left表示的是原始左上角的位置信息,其值不会发生改变。在平移过程中发生改变的x,y,translationX,translationY,x,y是View左上角的坐标,translationX,translationY是平移的距离。

x = left + translationX 
y = top + translationY

 

3、View的滑动

技术分享图片
public class ima extends AppCompatImageView {

    Scroller mScroller = new Scroller(getContext());

    public ima(Context context) {
        super(context);
    }

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

    public ima(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    //缓慢滚动到指定位置
    public void smoothScrollTo(int destX, int destY){
        int scrollX = getScrollX();
        int deltaX = scrollX - destX;
        //1000ms弹性滑动,效果就慢慢滑动
        mScroller.startScroll(scrollX,0,deltaX,0,1000);
        invalidate();
    }

    @Override
    public void computeScroll() {
        if(mScroller.computeScrollOffset()){
            scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
            postInvalidate();
        }
    }
}
View Code

这是我自定义的一个ima控件继承自AppCompatImageView。其中构造函数是直接继承来的。这里使用了Scroller实现View的弹性滑动。

 

View的事件体系

标签:body   ima   基于   指定   des   bottom   public   esc   ntop   

原文地址:http://www.cnblogs.com/xxbbtt/p/8032012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!