大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
android 用shape画圆,使用solid android:color="#f00" /(#f00表示填充的颜色),该属性来填充颜色,在Android studio按照如下步骤创建圆点并添加颜色属性。
在武安等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、做网站 网站设计制作按需制作,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销,外贸网站建设,武安网站建设费用合理。
1、在使用Android studio创建的Android项目中,在drawable中创建一个空白文件,如下图:
2、在该文件添加android:shape="oval"属性画一个圆,如下图:
3、添加solid android:color="#f00" /属性填充颜色,如下图:
最近在苦练Kotlin,一款不错的app(开眼)中的布局吸引了我,也在不懈的努力下通过Kotlin语言完成了开眼首页的RecyclerView多ViewType布局效果,开心!(文末会贴出来)其中用到的图片处理控件很实用,也在日常的项目中会经常用到,因此安利给大家!
本次就针对Android开发中的图片处理给大家安利两个开源库:CircleImageView(圆形图片)+RoundedImageView(圆角图片)。
Tips: Kotlin实现,写完整个项目会分享git源码给大家!
没错,这是一个RecyclerView布局实现的~
主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置代码: Activitypackage com.view;import android.app.Activity;import android.os.Bundle;import android.view.Window;import android.view.WindowManager;public class MainActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 隐藏状态栏this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);// 把Activity的标题去掉requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置布局this.setContentView(new MySurfaceView(this));}}SurfaceViewpackage com.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class MySurfaceView extends SurfaceView implements Runnable, Callback {private SurfaceHolder mHolder; // 用于控制SurfaceViewprivate Thread t; // 声明一条线程private boolean flag; // 线程运行的标识,用于控制线程private Canvas mCanvas; // 声明一张画布private Paint p; // 声明一支画笔private int x = 50, y = 50, r = 10; // 圆的坐标和半径public MySurfaceView(Context context) {super(context);mHolder = getHolder(); // 获得SurfaceHolder对象mHolder.addCallback(this); // 为SurfaceView添加状态监听p = new Paint(); // 创建一个画笔对象p.setColor(Color.WHITE); // 设置画笔的颜色为白色setFocusable(true); // 设置焦点}/*** 自定义一个方法,在画布上画一个圆*/public void Draw() {mCanvas = mHolder.lockCanvas(); // 获得画布对象,开始对画布画画mCanvas.drawRGB(0, 0, 0); // 把画布填充为黑色mCanvas.drawCircle(x, y, r, p); // 画一个圆mHolder.unlockCanvasAndPost(mCanvas); // 完成画画,把画布显示在屏幕上}/*** 当SurfaceView创建的时候,调用此函数*/@Overridepublic void surfaceCreated(SurfaceHolder holder) {t = new Thread(this); // 创建一个线程对象flag = true; // 把线程运行的标识设置成truet.start(); // 启动线程}/*** 当SurfaceView的视图发生改变的时候,调用此函数*/@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}/*** 当SurfaceView销毁的时候,调用此函数*/@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {flag = false; // 把线程运行的标识设置成false}/*** 当屏幕被触摸时调用*/@Overridepublic boolean onTouchEvent(MotionEvent event) {x = (int) event.getX(); // 获得屏幕被触摸时对应的X轴坐标y = (int) event.getY(); // 获得屏幕被触摸时对应的Y轴坐标return true;}/*** 当用户按键时调用*/@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ //当用户点击↑键时y--; //设置Y轴坐标减1}return super.onKeyDown(keyCode, event);}@Overridepublic void run() {while (flag) {Draw(); // 调用自定义画画方法try {Thread.sleep(50); // 让线程休息50毫秒} catch (InterruptedException e) {e.printStackTrace();}}}}MySurfaceView首先继承SurfaceView,然后实现Runnable和Callback接口重写了Runnable的run方法和Callback的surfaceCreated(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width,int height),surfaceDestroyed(SurfaceHolder holder)方法, 还实现了onTouchEvent(MotionEvent event),onKeyDown(int keyCode, KeyEvent event)方法来,详细的在代码里已注释。
使用ObjectAnimation,或者ValueAnimation都可以实现这个效果
ObjectAnimation可以动态设置控件有get与set方法的属性进行改变,给你的圆添加一个半径的属性,并添加get与set。
参考
//通过AnimatiorSet来设计同步执行的多个属性动画
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F);//X轴平移旋转
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F);//Y轴平移旋转
ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);//360度旋转
AnimatorSet set = new AnimatorSet();
//set.playSequentially(animator1, animator2, animator3);//分步执行
//set.playTogether(animator1, animator2, animator3);//同步执行
//属性动画的执行顺序控制
// 先同步执行动画animator2和animator3,然后再执行animator1
set.play(animator3).with(animator1);
set.play(animator2).after(animator3);
set.setDuration(1000);
set.start();
2.通过ValueAnimation来动态改变圆半径的属性
参考
public void onClick(View view) {
final ValueAnimator animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000);
animator.setInterpolator(new LinearInterpolator());//线性效果变化
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
Integer integer = (Integer) animator.getAnimatedValue();
button.setText("" + integer);
}
});
animator.start();
}
android中的imageview只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义imageview了,其原理就是首先获取到图片的bitmap,然后进行裁剪圆形的bitmap,然后在ondraw()进行绘制圆形图片输出。