引导层界面的Canvas和Paint效果
来源:互联网 发布:mac创建win7安装盘 编辑:程序博客网 时间:2024/06/04 23:33
废话不多说,先上图
此效果为一个透明的activity覆在最上层,在xml中按照对应提示的位置排列好布局,然后再新建一个类DrawView继承View,在类的OnDraw方法中新建自己要求的画笔画出要透漏的图形,然后在activity中新建这个类的对象,然后把这个view添加的activity所关联的布局上
先来看xml中的代码:首先新建一个布局名字叫indecatorhomepage内部有三张透明底色的图片代码如下:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/indecatorhomepage_ll"> <ImageView android:layout_weight="1" android:layout_marginRight="10dp" android:layout_marginTop="40dp" android:layout_gravity="center_horizontal|right" android:layout_width="200dp" android:layout_height="100dp" android:src="@drawable/indecator_user_center"/> <ImageView android:layout_weight="1" android:layout_marginLeft="40dp" android:layout_width="200dp" android:layout_height="100dp" android:layout_gravity="center_vertical" android:src="@drawable/indecator_recharge"/> <ImageView android:layout_weight="1" android:layout_marginBottom="30dp" android:layout_gravity="bottom|center_horizontal" android:layout_width="200dp" android:layout_height="100dp" android:src="@drawable/indecator_iknow"/></FrameLayout>
然后新建一个类IndecatorActivity关联这个布局代码如下:
public class IndecatorActivity extends Activity { FrameLayout frameLayout;//布局要使用帧布局 WindowManager wm;//获取屏幕 int scaleX,scaleY;//屏幕宽高 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //无title requestWindowFeature(Window.FEATURE_NO_TITLE); //全屏 setContentView(R.layout.indecatorhomepage); init(); frameLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } private void init() { wm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE); scaleX = wm.getDefaultDisplay().getWidth(); scaleY = wm.getDefaultDisplay().getHeight(); frameLayout = (FrameLayout)findViewById(R.id.indecatorhomepage_ll); final DrawView drawView = new DrawView(this,scaleX,scaleY);//新建这个view同时把宽高传过去 drawView.setMinimumWidth(scaleX); drawView.setMinimumHeight(scaleY); // drawView.invalidate(); frameLayout.addView(drawView);//把这个view添加到布局中 }}
下面就是关键的DrawView在这个类中画出你想要的图案:
public class DrawView extends View { int scaleX,scaleY; /* 唤醒渐变渲染 */ Shader mRadialGradient = null; Shader mRadialGradientRect = null; public DrawView(Context context,int scaleX,int scaleY) { super(context); this.scaleX = scaleX; this.scaleY = scaleY; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); Paint mpaint = new Paint(); Paint mpaintRect = new Paint(); mRadialGradient = new RadialGradient(17.75f * scaleX / 19, scaleY / 12.6f, scaleX/11, new int[]{Color.WHITE,Color.BLACK}, null, Shader.TileMode.MIRROR);//环形渲染,出现类似灯光打上的效果 mRadialGradientRect = new RadialGradient(170*scaleX/720,730*scaleY/1280,scaleX / 7, new int[]{Color.WHITE,Color.BLACK}, null, Shader.TileMode.MIRROR); mpaint.setShader(mRadialGradient); mpaint.setColor(Color.WHITE);//设置画笔的颜色为白色 mpaintRect.setColor(Color.WHITE); mpaintRect.setShader(mRadialGradientRect);//设置渲染 mpaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//设置mask的模式 mpaintRect.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawCircle(170 * scaleX / 720, 730 * scaleY / 1280, scaleX / 7, mpaintRect); canvas.drawCircle(17.75f * scaleX / 19, scaleY / 12.6f, scaleX / 11, mpaint); paint.setColor(Color.WHITE); paint.setAlpha(40);//设置透明度 paint.setShader(mRadialGradientRect); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawCircle(17.75f * scaleX / 19, scaleY / 12.6f, scaleX / 22, paint); }}
然后就是在你的Manifest.xml中设置你IndecatorActivity的theme为你自定义的透明度(这里就不细说了,我设置的是80%):
<activity android:name=".IndecatorActivity" android:theme="@style/translucent"> <intent-filter> <action android:name="com.fgs.indecatorTest"/><span style="color: rgb(128, 128, 128); font-style: italic;"><!--</span><span style="color: rgb(128, 128, 128); font-family: '宋体'; font-style: italic;">自定义透明度</span><span style="color: rgb(128, 128, 128); font-style: italic;">--></span> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
然后就是在主Activity中设置启动后跳转了:
public class MainActivity extends AppCompatActivity { private static int status = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layoutindecator); if (status == 0){ Intent intent = new Intent("com.fgs.indecatorTest"); startActivity(intent); //status++; } }}给一个mask遮掩层的实例做参考:http://blog.csdn.net/h3c4lenovo/article/details/44619913
好了现在就实现了图示效果了,大家有哪里不理解的可以给我留言。
0 0
- 引导层界面的Canvas和Paint效果
- Paint和canvas的用法
- Paint和canvas的用法
- Canvas和paint的使用
- Android Paint和Canvas常用方法和效果
- Drawable、Bitmap、Canvas和Paint的区别
- Drawable、Bitmap、Canvas和Paint的关系
- canvas和paint 类 的学习
- andriod Canvas 和 Paint方法的解释
- Canvas类和Paint的绘制机器人
- Drawable、Bitmap、Canvas和Paint的区别
- Drawable、Bitmap、Canvas和Paint的关系
- Drawable、Bitmap、Canvas和Paint的关系
- Drawable、Bitmap、Canvas和Paint的区别
- Drawable、Bitmap、Canvas和Paint的区别
- Canvas和Paint的常用方法
- Android Canvas 和Paint的用法
- Android的Canvas、Bitmap、Drawable和Paint
- App架构经验总结
- SqlServer索引及优化详解
- code forces E A rectangle
- python爬虫学习(一)
- Android性能优化
- 引导层界面的Canvas和Paint效果
- KSImageNamed 安装后无效解决方法(试过有效)
- mysql监视器MONyog的使用
- P2P通讯的C++实现-UDP Hole Punching方法
- Android NFC开发概述
- 安卓实现clean architecture的大体思路
- 多线程:pthread演练
- CentOS 7 安装 SVN 服务
- PowerDesigner 的mysql PDM 的COMMENT注释改为name+comment