Android-自定义View的使用

Android所有的控件都继承至View,所以我们可以通过继承View来实现自己想要的控件,具体代码如下:

1,创建自定义View 类

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class CustomView extends View {
    /*
    画笔,用来绘制View
     */
    private Paint p = new Paint();

    /**
     * 此构造方法用于代码生成自定义View实例
     * @param context
     */
    public CustomView(Context context) {
        super(context);
    }

    /**
     * 此构造方法用于XML文件生成自定义View实例
     * @param context
     * @param attrs
     */
    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 重写onDraw方法即可实现自定义的View效果
     * @param canvas
     */
    @Override
    protected void onDraw(Canvas canvas) {
        /*
        画一个图片
         */
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
        /*
        100,100是图片所在的位置,可自定义
        */
        canvas.drawBitmap(bitmap,100,100,p);
    }

    /**
     * 重写此方法可以监听点击事件
     * @param l
     */
    @Override
    public void setOnClickListener(OnClickListener l) {
        super.setOnClickListener(l);
    }
}

2,布局文件中添加自定义View 的效果


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:orientation="vertical"
    android:paddingTop="@dimen/activity_vertical_margin">


    <githan.cn.customview.CustomView
        android:id="@+id/custom_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

LinearLayout>

3,MainActivity中获取自定义View实例

package githan.cn.customview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private CustomView customView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
        找到自定义的View
        */
        customView = (CustomView) findViewById(R.id.custom_view);
        /*
        设置View的监听事件
        */
        customView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "onclick", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

完成这三步之后你的自定义View就可以正常显示啦,上面的例子使用自定义View画了一个图标,如下图所示
Android-自定义View的使用_第1张图片

关于Paint和Canvas的使用可以阅读以下文章:
http://www.jianshu.com/p/c29d3f3b7112

如果希望自定义View能够动起来,可以通过Thread线程改变View的x, y坐标,然后调用postInvalidate()方法通知View重绘即可,这里不在叙述。

你可能感兴趣的:(Android)