自定义对话框显示不出来

问题描述

自定义对话框显示不出来

继承Dialog的代码:
import android.app.Dialog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager.LayoutParams;

public class ColorPickerDialog extends Dialog {
private final int COLOR_DIALOG_WIDTH = 300;
private final int COLOR_DIALOG_HEIGHT = 300;
private final int CENTER_X = COLOR_DIALOG_WIDTH / 2;
private final int CENTER_Y = COLOR_DIALOG_HEIGHT / 2;
private final int CENTER_RADIUS = 32;

public interface OnColorChangedListener {
    void colorChanged(int color);
}

private OnColorChangedListener mListener;
private int mInitialColor;

public ColorPickerDialog(Context context, OnColorChangedListener listener, int initialColor) {
    super(context);
    mListener = listener;
    mInitialColor = initialColor;

}

private class ColorPickerView extends View {
    private Paint mPaint;
    private Paint mCenterPaint;
    private final int[] mColors; // 颜色带的起始颜色
    private OnColorChangedListener mListener;
    private boolean mTrackingCenter;
    private boolean mHightlightCenter;

    private static final float  PI = 3.1415926f;

    public ColorPickerView(Context c, OnColorChangedListener listener,
            int color) {
        super(c);
        mListener = listener;
        mColors = new int[] { 0xFFFF0000, 0xFFFF00FF, 0xFF0000FF,
                0xFF00FFFF, 0xFF00FF00, 0xFFFFFF00, 0xFFFF0000 };
        Shader s = new SweepGradient(0, 0, mColors, null);
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setShader(s);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(32);

        mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mCenterPaint.setColor(color);
        mCenterPaint.setStrokeWidth(5);

    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        float r = CENTER_X - mPaint.getStrokeWidth() * 0.5f - 20;

        canvas.translate(CENTER_X, CENTER_Y);

        canvas.drawCircle(0, 0, r, mPaint);
        canvas.drawCircle(0, 0, CENTER_RADIUS, mCenterPaint);

        if(mTrackingCenter)
        {
            int c = mCenterPaint.getColor();
            mCenterPaint.setStyle(Paint.Style.STROKE);
            if(mHightlightCenter)
            {
                mCenterPaint.setAlpha(0xFF);
            }
            else
            {
                mCenterPaint.setAlpha(0x00);
            }
            canvas.drawCircle(0, 0, CENTER_RADIUS + mCenterPaint.getStrokeWidth(), mCenterPaint);
            mCenterPaint.setStyle(Paint.Style.FILL);
            mCenterPaint.setColor(c);
        }
    }

    private int ave(int s, int d, float p)
    {
        return s + Math.round(p * (d - s));
    }
    private  int interpColor(int colors[], float unit)
    {
        if(unit <= 0)
            return colors[0];
        if(unit >=1)
            return colors[colors.length - 1];
        float p = unit * (colors.length - 1);
        int i =  (int)p;
        p-=i;
        int c0 = colors[i];
        int c1 = colors[i+1];
        int a = ave(Color.alpha(c0), Color.alpha(c1), p);
        int r = ave(Color.red(c0), Color.red(c1), p);
        int g = ave(Color.green(c0), Color.green(c1), p);
        int b = ave(Color.blue(c0), Color.green(c1), p);
        return Color.argb(a,r,g,b);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        float x = event.getX() - CENTER_X;
        float y = event.getY() - CENTER_Y;
        boolean inCenter = Math.sqrt(x*x+y*y) <= CENTER_RADIUS;

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mTrackingCenter = inCenter;
            if(inCenter)
            {
                mHightlightCenter = true;
                invalidate();
                break;
            }
        case MotionEvent.ACTION_MOVE:
            float angle = (float)Math.atan2(y, x);
            float unit = angle/(2*PI);
            if(unit < 0)
                unit+=1;
            mCenterPaint.setColor(interpColor(mColors, unit));
            invalidate();
            break;
        case  MotionEvent.ACTION_UP:
            if(mTrackingCenter)
            {
                if(inCenter)
                {
                    mListener.colorChanged(mCenterPaint.getColor());
                }
                mTrackingCenter  =false;
                invalidate();
            }
            break;
        default:
            break;
        }
        return true;
    }

}
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    OnColorChangedListener listenr = new OnColorChangedListener() {

        @Override
        public void colorChanged(int color) {
            mListener.colorChanged(color);
            dismiss(); 

        }
    };
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(new ColorPickerView(getContext(), listenr, mInitialColor));
    ColorDrawable colorDrawable = new ColorDrawable();
    colorDrawable.setColor(Color.BLACK);
    getWindow().setBackgroundDrawable(colorDrawable);

    getWindow().setAttributes(new LayoutParams(COLOR_DIALOG_WIDTH,COLOR_DIALOG_HEIGHT, 0,0,0));
}

}

import cn.eoe.superflashlight.ColorPickerDialog.OnColorChangedListener;
import cn.eoe.superflashlight.widget.HideTextView;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;

public class ColorLight extends Bulb implements OnColorChangedListener{
protected int mCurrentColorLight = Color.RED;
protected HideTextView mHideTextViewColorLight;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mHideTextViewColorLight = (HideTextView)findViewById(R.id.textview_hide_color_light);
}

@Override
public void colorChanged(int color) {
    mUIColorLight.setBackgroundColor(color);
    mCurrentColorLight = color;

}

public void onClick_ShowColorPicker(View view)
{
    ColorPickerDialog dialog=new ColorPickerDialog(this, this, Color.RED);
    dialog.show();
}

}

报了这么一条错误:

哪位大神怎么改啊???????????????

解决方案

显示自定义的对话框
自定义对话框组件
自定义对话框显示位置的控制

时间: 2024-11-03 04:07:00

自定义对话框显示不出来的相关文章

实用ExtJS教程100例-005:自定义对话框Ext.MessageBox.show

我们对ExtJS对话框进行了三篇演示: MessageBox的三种用法 进度条对话框Ext.MessageBox.progress 等待对话框Ext.MessageBox.wait 通过上面三篇内容的演示,相信你已经基本上了解了ExtJS的基本样式,这篇文章将演示如何使用自定义ExtJS对话框. Ext.MessageBox.show演示 要显示自定义的对话框,我们需要用到Ext.MessageBox.show方法.先来看一个简单的例子: Ext.get("btn1").on(&quo

Android简明开发教程十八:自定义对话框Transform

Android自带的AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog 可以用于简单的对话框显示.当还是有 这些对话框不能满足应用需要的时候,这时就可以使用一些自定 义的对话框.有多种方法可以实现自定义对话框.一是使用Activity作为Dialog,可以通过设置Activity显示Dialog风格,使得 该Activity在外观上和Dialog一致:显示在其它Activity前面 且半透明. <Activity androi

ANDROID中自定义对话框AlertDialog使用示例_Android

在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式.AlertDialog中定义的一些对话框往往无法满足我们关于对话框的需求,这时我们就需要通过自定义对话框VIEW来实现需求,这里我自定义一个登陆的提示对话框,效果图显示如下: Layout(alertdialog自定义登陆按钮)界面代码: <?xml version="1.0" en

从零学React Native之04自定义对话框

之前我们介绍了RN相关的知识: 是时候了解React Native了 从零学React Native之01创建第一个程序 从零学React Native之02状态机 从零学React Native之03页面导航 本篇主要介绍: 1. 自定义组件 2. Alert 对话框 自定义对话框 之前的我都是利用React Native提供的基础组件对它们进行排列组合, 其实自定义也很简单, 我们还是拿上一篇文章的例子进行扩展. 当我们点击注册的时候,可以弹出一个对话框,让用户确认一下,如下图: 接下来就来

用JQuery 实现的自定义对话框_jquery

JavaScript为我们提供几种对话框功能,但功能都十分有限:虽然在IE下可以通过模式窗体的方式创建更丰富的对话框功能,但毕竟只有IE得到支持.为了得到更丰富的自定义对话框功能,于是用JQuery编写了一个对话框插件:只需简单地引用相关JavaScript就能得到丰富的自定义对话框功能. 插件功能特点:        允许通过CSS进行外观控制.        可以任意把面页的元素作为对话框显示.        当对话框激活时,对话框外的任何元素不能接受鼠标操作.        对话框可以在工

JQuery实现自定义对话框的代码_jquery

为了得到更丰富的自定义对话框功能,于是用JQuery编写了一个对话框插件:只需简单地引用相关JavaScript就能得到丰富的自定义对话框功能. 插件功能特点: 允许通过CSS进行外观控制. 可以任意把面页的元素作为对话框显示. 当对话框激活时,对话框外的任何元素不能接受鼠标操作. 对话框可以在工作区范围内任意移动,根据工作区大小自适应居中功能. 并不需要编写复杂的JavaScript,通过简单HTML属性描述即可. 经过测试插件可以在Firefox和IE下正常工作. 简单使用描述: 引用JQu

Android常用的AlertDialog对话框及自定义对话框

常用的Dialog有确认对话框,单选按钮对话框,多选按钮对话框,复选按钮对话框另外还有自定义的对话框 AlertDialog的常用方法 setTitle:为对话框设置标题 setMessage:为对话框设置内容 setIcon:为对话框设置图标 setItems设置对话框要显示的list setMultiChoiceItems:一般用于复选框显示 setSingleChoiceItem:,设置单选按钮 setNeutralButton:普通按钮 setPositiveButton:添加确定按钮

ANDROID中自定义对话框AlertDialog使用示例

在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式.AlertDialog中定义的一些对话框往往无法满足我们关于对话框的需求,这时我们就需要通过自定义对话框VIEW来实现需求,这里我自定义一个登陆的提示对话框,效果图显示如下: Layout(alertdialog自定义登陆按钮)界面代码: <?xml version="1.0" en

Androd自定义对话框Dialog视图及参数传递的实现方法

今天给大家讲讲有关自定义对话框的相关内容,前面两篇都在在利用系统提供的函数来实现对话框,但局限性太大,当我们想自己定义视图的时候,就不能利用系统函数了,就需要我们这里的自定义对话框了,有关自定义对话框的东东,以前有写过一篇<android之Dialog相关>,写的不好,今天给大家重新写一篇 一.雏形构建 先给大家看下这小节的效果图: 自定义一个对话框,内容是四个ImageView横排: 1.Dialog布局 根据上图的对话框样式,我们看一下Dialog的布局定义(custom_dialog.x