質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

721閲覧

tooltipの作成方法について

kanekane

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/08/26 13:32

package com.example.kanemoto.samplecoachmarks;

import android.app.Activity;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.graphics.Color;
import android.graphics.Rect;
import android.hardware.camera2.CameraManager;
import android.support.annotation.ColorRes;
import android.support.annotation.IntDef;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.view.animation.Animation;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.kanemoto.samplecoachmarks.databinding.WidgetCoachTooltipBinding;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;

import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1;

class CoachMark {
private static final int ROOT_TOP = 1;
private static final int ROOT_BOTTOM = 2;
private static final int ROOT_CENTER = 3;

private static final int TARGET_TOP = 4; private static final int TARGET_BOTTOM = 5; private static final int TARGET_TOP_LEFT = 6; private static final int TARGET_BOTTOM_LEFT = 7; private static final int TARGET_TOP_RIGHT = 8; private static final int TARGET_BOTTOM_RIGHT = 9; private static final int TARGET_FILL_IN = 10; private static final int TARGET_LEFT = 11; private static final int TARGET_RIGHT = 12; private static final int POINTER_RIGHT = 1; private static final int POINTER_MIDDLE = 2; private static final int POINTER_LEFT = 3; private static final int POINTER_GONE = 4; public static final double CIRCLE_ADDITIONAL_RADIUS_RATIO = 1.5D; @IntDef({ROOT_TOP, ROOT_CENTER, ROOT_BOTTOM, TARGET_TOP, TARGET_BOTTOM, TARGET_TOP_LEFT, TARGET_BOTTOM_LEFT, TARGET_TOP_RIGHT, TARGET_BOTTOM_RIGHT, TARGET_FILL_IN, TARGET_LEFT, TARGET_RIGHT}) @Retention(RetentionPolicy.SOURCE) public @interface TooltipAlignment { } @IntDef({POINTER_RIGHT, POINTER_MIDDLE, POINTER_LEFT, POINTER_GONE}) @Retention(RetentionPolicy.SOURCE) public @interface PointerTooltipAlignment { } private final int animDuration; private final Activity activity; private final FrameLayout container; private int tooltipAlignment; private int tooltipPointerAlignment; private final int overlayPadding; private final int tooltipMargin; private final int backgroundColorResource; private final int radius; private final boolean dismissible; private final boolean isCircleMark; private boolean isShow; private final float backgroundAlpha; private CoachMarkOverlay coachMarkOverlay; private final View targetView; private View.OnClickListener targetOnClick; private final Function0 onDismissListener; private final Function0 onAfterDismissListener; private final Animation tooltipShowAnimation; private final Animation tooltipDismissAnimation; private final WidgetCoachTooltipBinding tooltipBinding; private final List<View> tooltipChild; CoachMark(Builder builder) { this.activity = builder.activity; this.container = new FrameLayout(this.activity); this.backgroundColorResource = builder.backgroundColor; this.isCircleMark = builder.isCircleMark; this.targetView = builder.target; this.overlayPadding = ViewUtils.dpToPx(this.activity, builder.markerPadding); this.dismissible = builder.dismissible; this.tooltipAlignment = builder.tooltipAlignment; this.tooltipPointerAlignment = builder.pointerTooltipAlignment; this.tooltipMargin = ViewUtils.dpToPx(this.activity, builder.tooltipMargin); this.onDismissListener = builder.onDismissListener; this.onAfterDismissListener = builder.onAfterDismissListener; this.tooltipShowAnimation = builder.tooltipShowAnimation; this.tooltipDismissAnimation = builder.tooltipDismissAnimation; this.radius = builder.radius; this.backgroundAlpha = builder.backgroundAlpha; this.tooltipChild = builder.tooltipChilds; LayoutInflater layoutInflater = LayoutInflater.from(activity); tooltipBinding = DataBindingUtil.inflate(layoutInflater, R.layout.widget_coach_tooltip, container, false); View tooltipView = tooltipBinding.getRoot(); tooltipView.setBackgroundColor(builder.tooltipBackgroundColor); Window window = activity.getWindow(); if (window != null) { ViewGroup decorView = (ViewGroup) window.getDecorView(); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); container.setBackgroundColor(Color.TRANSPARENT); decorView.addView(container, layoutParams); coachMarkOverlay = new CoachMarkOverlay(activity); coachMarkOverlay.setBackgroundResource(backgroundColorResource); coachMarkOverlay.setAlpha(backgroundAlpha); container.addView(coachMarkOverlay, layoutParams); container.addView(tooltipView); } animDuration = container.getResources().getInteger(android.R.integer.config_longAnimTime); container.setClickable(true); container.setVisibility(View.GONE); container.setAlpha(0.0f); addTarget(); } private void setTooltipAlignment(@TooltipAlignment int tooltipAlignment, @PointerTooltipAlignment int pointerTooltipAlignment) { this.tooltipAlignment = tooltipAlignment; this.tooltipPointerAlignment = pointerTooltipAlignment; tooltipBinding.getRoot().getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { relocationTooltip(targetView, CoachMark.this.tooltipAlignment); pointerTooltipAlignment(targetView, CoachMark.this.tooltipPointerAlignment); tooltipBinding.getRoot().getViewTreeObserver().removeOnPreDrawListener(this); return false; } }); } private void addTarget() { if (targetView == null) { throw new IllegalArgumentException(""); } else { targetView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { addRoundRect(targetView); setTooltipAlignment(tooltipAlignment, tooltipPointerAlignment) targetView.getViewTreeObserver().removeOnPreDrawListener(this); return false; } }); } } private void addRoundRect(View view) { Rect rect = new Rect(); view.getGlobalVisibleRect(rect); int radius = this.radius; int x = rect.left; int y = rect.top; int width = rect.width(); int height = rect.height(); addTargetClick(rect, view); coachMarkOverlay.setBackgroundResource(backgroundColorResource) coachMarkOverlay.alpha = backgroundAlpha coachMarkOverlay.addRect(x, y, width, height, radius, overlayPadding, isCircleMark) coachMarkOverlay.postInvalidate() }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/08/26 13:38

しつもんはなんでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問