今天和大家分享一下实现Android Studio实现点击按钮弹出气泡的实现过程。一开始制作的时候我也不知道具体怎么实现,但是网上看了一些代码之后自己尝试了之后终于实现了这个功能,使用PopWindow就可以实现气泡的谈弹出。
实现效果图
实现代码如下
MainActivity
package com.example.qipao;
import android.app.Activity;
import android.graphics.Point;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.SeekBar;
import android.widget.TextView;
public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener {
PopupWindow mPopupWindow;
private Button button;
Point mPoint = new Point();
private SeekBar seekbar;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
manager.getDefaultDisplay().getSize(mPoint);
setContentView(R.layout.activity_main);
//使用View.inflate来加载气泡布局
View view = View.inflate(getApplicationContext(), R.layout.layout,null);
//得到气泡中的控件view.findViewById,不能直接使用findViewById
seekbar = (SeekBar)view.findViewById(R.id.seekbar);
text = (TextView) view.findViewById(R.id.text23);
seekbar.setOnSeekBarChangeListener(this);
mPopupWindow = new PopupWindow(view,1000,800);
mPopupWindow.setFocusable(true);//设置气泡内空间可以点击
mPopupWindow.setOutsideTouchable(true);//可以获得焦点
mPopupWindow.setTouchable(true);//点击气泡外可以dismiss气泡
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// new PopClass(MainActivity.this,v,mPoint.y);
if (mPopupWindow.isShowing()){//如果气泡已经存在则dismiss气泡
mPopupWindow.dismiss();
}
else {
//更具按钮的位置来了控制气泡弹出的位置
mPopupWindow.showAsDropDown(v,-820+v.getWidth()/2,mPoint.y/2+200);
}
}
});
}
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
switch (seekBar.getId()){
case R.id.seekbar:
text.setText("温度报警阈值:"+i+"℃");
break;
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
mainactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_dark"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="温度"
></Button>
</RelativeLayout>
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<com.example.qipao.PopView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></com.example.qipao.PopView>
<TextView
android:id="@+id/text23"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="70dp"
android:text="温度报警阈值:100℃"
android:gravity="center"
android:layout_centerHorizontal="true"
android:textSize="20dp"></TextView>
<SeekBar
android:id="@+id/seekbar"
android:layout_width="500dp"
android:layout_height="20dp"
android:layout_marginTop="100dp"
android:layout_marginLeft="20dp"
></SeekBar>
</RelativeLayout>
PopView
package com.example.qipao;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class PopView extends View {
Paint mPaint = new Paint();
RectF mRectF = new RectF(50, 200, 1000, 400);
public PopView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
mPaint.setAntiAlias(true);
mPaint.setColor(Color.parseColor("#60FFFFFF"));
mPaint.setDither(true);
canvas.drawRoundRect(mRectF, 25, 25, mPaint);
Path path = new Path();
path.moveTo(800,200);
path.lineTo(820,100);
path.lineTo(840,200);
path.close();
canvas.drawPath(path,mPaint);
}
}
https://download.csdn.net/download/weixin_44223883/12205040