`
zhangfy068
  • 浏览: 148395 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

画一个倒三角

 
阅读更多

 

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);
	}
	
}

 
 

  • 大小: 6.5 KB
分享到:
评论
2 楼 zhangfy068 2013-05-16  
yaoggw 写道
你好, ArrowView 怎么充当别的控件的背影啊? 我获取ArrowView.getBackground()方法获取的是null, 

我这个ArrowView只是在onDraw()绘制了自己而已,又没设置setBackgroud()
1 楼 yaoggw 2013-05-15  
你好, ArrowView 怎么充当别的控件的背影啊? 我获取ArrowView.getBackground()方法获取的是null, 

相关推荐

    vb 简单正三角倒三角程序

    为了生成一个简单的正三角或倒三角图形,我们可以使用`Pset`或`Line`方法结合循环来绘制各个顶点。以下是一个基本的示例,展示如何在VB中生成一个正三角形: ```vb Private Sub Command1_Click() Dim xCenter As ...

    倒三角 C++ 程序

    用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 字符交替的倒三角

    一个漂亮的下拉列表,去掉了灰色倒三角按钮

    2. 自定义下拉列表按钮:文件中特别提到“去掉了灰色倒三角按钮”,这是对下拉列表的默认显示样式进行修改的一个细节。通常,浏览器自带的下拉列表会在选项右侧有一个灰色的倒三角形图标,指示这是一个可展开的列表...

    tab下面画线并有效三角

    "Tab下面画线并有效三角"的标题和描述指向的是一个关于如何在Tab组件下方添加动态下划线和切换时伴随的小三角形指示器的实现方法。这种设计通常用于指示当前选中的Tab项,提升用户体验。 Tab组件是UI设计中的一个...

    android canvas 画曲线图 画三角形(多边形)

    Canvas是Android中的一个类,它提供了在Bitmap上绘制图形的方法。通常,我们会在View的onDraw()方法中实例化Canvas,并调用其drawXXX()系列方法来绘制图形。 1. **画曲线图**: - 创建一个自定义View类,重写...

    纯CSS3实现倒三角统计图 纯CSS3实现倒三角统计图网页特效.zip

    通过改变角度和旋转中心,我们可以使一个正三角形元素变为倒三角形,从而形成统计图的基础形状。 为了展示数据,我们可以使用伪元素(如`:before`和`:after`)来添加额外的形状或线条,这些元素可以进一步通过CSS3...

    HTML5酷炫的倒三角动画特效

    在本主题“HTML5酷炫的倒三角动画特效”中,我们将探讨如何利用HTML5的特性来实现一个引人注目的倒三角形动画效果,这种效果常用于网站的引导页,为用户提供一种视觉上的引导和吸引。 首先,要创建倒三角动画,我们...

    纯CSS3饼形和倒三角统计图 无js

    本文将深入探讨如何利用纯CSS3实现饼形图和倒三角统计图,这两种图表在数据可视化中都有广泛的应用。无需JavaScript(js)的参与,我们可以通过CSS3的特性来实现动态和交互式的视觉效果。 首先,让我们了解饼形图。...

    精致倒三角形状层级关系PPT图表

    "精致倒三角形状层级关系PPT图表"是一种视觉工具,它利用倒三角的结构来有效地呈现层次结构,帮助观众理解信息的优先级和关联性。这种图表通常用于表示决策过程、组织结构或者问题解决的步骤,因为它能清晰地展现从...

    HFSS绘制三角切角教程

    如何使用HFSS来绘制三角贴片。若切角是等腰三角形,在弹出的对话框中选 Symmetric,如图 2-3 所示。点击 OK,建立模型如图 2-4 所示,其中边长属性可以设置变 量进行参数扫描。若建立非等腰三角的切角,Chamfer Type...

    C++实验题:打印三角形图案

    题目要求编写一个程序,该程序能够根据用户的输入(包括行数与指定字符)来打印出不同大小和填充字符的等腰三角形。 #### 题目要求 1. **获取用户输入**:首先询问用户希望打印的三角形有多少行(`How many lines?`...

    Python画四方形、平行线、三角形

    Python画四方形、平行线、三角形

    C语言动画设计倒计时的背景

    这段代码实现了一个简单的倒计时背景效果——旋转的彩色圆圈。通过结合使用数学函数和图形库函数,实现了动态变化的颜色和连续旋转的效果。此外,还涉及到了C语言的基础语法知识,如循环、条件判断、函数定义等。这...

    彩色折叠倒三角形状层级关系PPT图表

    "彩色折叠倒三角形状层级关系PPT图表"是一个设计精巧的视觉工具,它能有效地帮助观众理解层次结构和组织结构。 首先,我们来解析这个标题。"彩色折叠倒三角形状"指的是图表的设计元素,这种形状通常用来表示权力、...

    .NET 上机测试题一

    在.NET编程环境中,上机测试题常常涉及到基础...这不仅适用于画倒三角形,还适用于许多其他图形绘制或基于控制流的编程挑战。通过解决这类问题,开发者可以提升自己的编程技能,为更高级的.NET开发任务打下坚实的基础。

    用python画小猪佩奇

    接着是鼻子,我们可以用一个倒三角形来表示: ```python # 绘制鼻子 pen.penup() pen.goto(0, 0) pen.pendown() pen.begin_fill() pen.left(120) pen.forward(30) pen.left(120) pen.forward(30) pen.left(120) pen...

    VC++ 在Form窗体的菜单中添加一个下拉小三角,意在说明该项菜单可以展开,或者有二级项,看似简单,貌似实现起来还真不简单,笔者在初学VC的时候就曾被类似问题难倒过,看来,基础的东西一定不要看不上眼,否则你在将来会遇到麻烦事。

    在VC++中,创建带有下拉小三角的菜单项是一项常见的任务,这通常用于表示一个菜单项具有子菜单或者能够触发一系列的操作。然而,对于初学者来说,这个看似简单的功能可能会带来一定的挑战。本文将详细讲解如何在Form...

    LCD绘制三角波、方波、正弦波曲线程序

    本项目是关于在LCD上绘制三角波、方波和正弦波曲线的程序,这对于学习嵌入式系统、微控制器编程以及数字信号处理的初学者来说,是一个非常有价值的实践项目。 首先,我们需要理解如何在LCD上进行图形绘制。LCD通常...

    3D无限圆柱体Canvas特效

    在本文中,我们将深入探讨"3D无限圆柱体Canvas特效"这一技术主题,它是JavaScript编程中的一个创新应用,主要用于创建动态、引人入胜的网页视觉效果。这个特效是利用HTML5的Canvas元素来实现的,Canvas是HTML5的一个...

Global site tag (gtag.js) - Google Analytics