public class ArrowView extends View{ private Context mContext = null; @Override protected void onDraw(Canvas canvas) { Path path = new Path(); path.moveTo(0, 0); path.lineTo(getWidth(), 0); path.lineTo(getWidth()/2, getHeight()); path.lineTo(0, 0); ShapeDrawable circle = new ShapeDrawable(new PathShape(path, getWidth(), getHeight())); circle.getPaint().setColor(mContext.getResources().getColor(R.color.download_bg_menu)); circle.setBounds(0, 0, getWidth(), getHeight()); circle.draw(canvas); super.onDraw(canvas); } public ArrowView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; } }
如果三角的底色设置为背景色一致,以下是是方便区分。
原理是开启一个PopWindow,还可以为开启PopWindow设置一个启动动画效果。
mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mRootView = mInflater.inflate(R.layout.task_menu_view, null); mWindow = new PopupWindow(mContext); mWindow.setAnimationStyle(R.style.anim_menu_window); //触碰其他的地方就关闭 mWindow.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { XLDownloadMenuWindow.this.mWindow.dismiss(); return true; } return false; } });
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="anim_menu_window"> <item name="android:windowEnterAnimation">@anim/anim_menu_show</item> <item name="android:windowExitAnimation">@anim/anim_menu_dismiss</item> </style> </resources>
show popwindow
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <scale android:duration="100" android:fromXScale="1.0" android:fromYScale="0.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="100%" android:pivotY="100%" android:toXScale="1.0" android:toYScale="1.0" /> </set>
dismiss popwindow
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <scale android:duration="100" android:fromXScale="1.0" android:fromYScale="1.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="100%" android:pivotY="100%" android:toXScale="1.0" android:toYScale="0.0" /> </set>
package com.xunlei.downloadplatforms.sample3; import com.xunlei.downloadplatforms.sample3.XLDownloadClientConstants.MenuOperateType; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup.MarginLayoutParams; import android.widget.Button; import android.widget.ImageView; import android.widget.PopupWindow; public class XLDownloadMenuWindow { private Context mContext = null; private LayoutInflater mInflater = null; private View mRootView = null; private PopupWindow mWindow = null; private Drawable mBGDrawable = null; private Handler mMenuOperateHandler = null; private Button mBtnInit = null; private Button mBtnUninit = null; private Button mBtnExit = null; private int mRootWidth; private int mRootHeight; public XLDownloadMenuWindow(Context context, Handler handler) { mContext = context; mMenuOperateHandler = handler; mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mRootView = mInflater.inflate(R.layout.task_menu_view, null); mWindow = new PopupWindow(mContext); //设置动画文件 mWindow.setAnimationStyle(R.style.anim_menu_window); //触碰其他的地方就关闭 mWindow.setTouchInterceptor(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { XLDownloadMenuWindow.this.mWindow.dismiss(); return true; } return false; } }); initControllers(); } private void initControllers() { mBtnInit = (Button) mRootView.findViewById(R.id.task_menu_btn_init); mBtnUninit = (Button) mRootView.findViewById(R.id.task_menu_btn_uninit); mBtnExit = (Button) mRootView.findViewById(R.id.task_menu_btn_exit); mBtnInit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(mMenuOperateHandler instanceof Handler) { Message msg = mMenuOperateHandler.obtainMessage(); msg.what = MenuOperateType.INIT; msg.sendToTarget(); } mWindow.dismiss(); } }); mBtnUninit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(mMenuOperateHandler instanceof Handler) { Message msg = mMenuOperateHandler.obtainMessage(); msg.what = MenuOperateType.UNINIT; msg.sendToTarget(); } mWindow.dismiss(); } }); mBtnExit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(mMenuOperateHandler instanceof Handler) { Message msg = mMenuOperateHandler.obtainMessage(); msg.what = MenuOperateType.EXIT; msg.sendToTarget(); } } }); } public void show(View authorView) { if(authorView instanceof View && mWindow instanceof PopupWindow) { if(!mWindow.isShowing()) { int[] location = new int[2]; authorView.getLocationOnScreen(location); Rect authorRect = new Rect(location[0], location[1], location[0] + authorView.getWidth(), location[1] + authorView.getHeight()); preShow(); mRootView.measure(0, 0); mRootWidth = mRootView.getMeasuredWidth(); mRootHeight = mRootView.getMeasuredHeight(); int xPos = 0; int yPos = authorRect.top - mRootHeight; mWindow.showAtLocation(authorView, Gravity.NO_GRAVITY, xPos, yPos); } else { mWindow.dismiss(); } } } private void preShow() { if (mBGDrawable == null) { mWindow.setBackgroundDrawable(new BitmapDrawable()); } else { mWindow.setBackgroundDrawable(mBGDrawable); } mWindow.setWidth(MarginLayoutParams.MATCH_PARENT); mWindow.setHeight(MarginLayoutParams.WRAP_CONTENT); mWindow.setTouchable(true); mWindow.setOutsideTouchable(true); mWindow.setFocusable(true); mWindow.setContentView(mRootView); } }
相关推荐
用C++语言在显示器上画出倒三角 for(int i=1;i;++i){ for( int j=1;j;++j) count; for(int k=1;K*i;++k) count;
实现倒三角功能。具体的流程图就不画了。可以直接使用的哦
(c++运行环境 ) 输 出 以 n 为 高 的 st 字符交替的倒三角
android 画曲线图 画三角形(多边形),可以画成股票K线图,儿童成长曲线等,使用android的canvas
此demo简单易懂,解决了tab下面有下划线并带小三角,随着tab一起滑动
HTML5酷炫的倒三角动画特效是一款大气的logo引导页动画特效。
如何使用HFSS来绘制三角贴片。若切角是等腰三角形,在弹出的对话框中选 Symmetric,如图 2-3 所示。点击 OK,建立模型如图 2-4 所示,其中边长属性可以设置变 量进行参数扫描。若建立非等腰三角的切角,Chamfer Type...
Python画四方形、平行线、三角形
VC++ 在Form窗体的菜单中添加一个下拉小三角,意在说明该项菜单可以展开,或者有二级项,看似简单,貌似实现起来还真不简单,笔者在初学VC的时候就曾被类似问题难倒过,看来,基础的东西一定不要看不上眼,否则你在...
可设置显示倒三角、倒三角边长、倒三角位置、倒三角颜色。 可设置显示图标、图标间隔、图标尺寸、正常状态图标、悬停状态图标、选中状态图标。 可设置显示边框线条、线条宽度、线条间隔、线条位置、线条颜色。 可...
2、下拉选择按钮用css画一个向下的三角形 3、显示部分的下方放置一个div,上级div样式为display:flex;flex-direction: column;使其能够纵向排列,该div样式设为position: relative;下面放置一个日历组件,样式设置为...
通过 shape 实现梯形(可以用于右下角角标等) 通过 shape 实现梯形(可以用于左下角角标等) 通过 shape 实现正三角形(可以用于气泡上的三角等) 作者:xueand
今天小编就为大家分享一篇python循环输出三角形图案的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
高仿手机qq空间中每条说说倒三角点击弹窗效果,dialog的弹出位置是跟随倒三角的位置,同时弹出动画也一样
买不起,还是用css来画一个吧,但你敢送给自己女朋友,不保证不被打。 下午两点要相亲,要不把这个送相亲对象? 效果 先看下效果吧,想一想怎么构图先。 上图是已经完成的效果。钻石整体都是由三角形构成,上五下三...
以前为了偷懒就直接去github上找一个开源项目,后来才发现绘制圆形图片其实也是很简单的事。 绘制圆形图片也需要两个步骤: 绘制圆形和绘制图片,只不过要让它们取并集,得到的结果就是一张圆形图片了。 直接上代码...
以三个视觉中心为景物的主要位置,有时是以三点成面几何构成来安排景物,形成一个稳定的三角形。这种三角形可以是正三角也可以是斜三角或倒三角,其中斜三角较为常用,也较为灵活。三角形构图具有安定、均衡但不失...
.NET 上机测试 画下面倒立三角形 ******* ***** *** *
易语言特殊形状按钮源码,特殊形状按钮,窗口异型_正三角形,新函数,窗口异型_倒三角形,窗口异型_圆角矩形,窗口异型_平行四边形,画正三角焦点,DeleteObject,SetWindowRgn,CreateEllipticRgn,CreatePolygonRgn,...
点击“编辑→定义图案”,在弹出的“图案名称”中输入一个名称,如“证件照头像”,将做好的证件照变成PS内置的一个图案。然后新建宽度12.7cm、高度8.9cm、分辨率300的白底文档。点击菜单栏“图像→填充”,在弹出的...