- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在创建一个图像编辑应用程序。我在其中提供了打开相机或画廊以选择图片的便利。选择图片后,用户将导航到其他页面。在其他显示图片的页面中,我使用了一个实现了 AppCompactImageView
的 View 。现在,我正在提供使用 edittext 添加文本的便利。单击软键盘的“完成”按钮时,edittext 将消失并被 TextView
取代。现在我想将这个 TextView 拖到整个布局中。但是在 drop 操作之后,它就消失了。下面是我的代码。任何帮助都将不胜感激。
DrawActivity.java
公共(public)类 DrawActivity 扩展 AppCompatActivity {
DrawView imgView;
Button resetBtn, saveBtn;
ImageButton undoBtn;
Bundle extras;
Context context;
EditText addTxtBox;
ImageView brushImg, fontImg;
TextView addedTxtView;
// LinearLayout mainLinear;
RelativeLayout mainRelative;
public int rowX, rowY;
public String txtVal;
private android.widget.RelativeLayout.LayoutParams layoutParams;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_draw);
context = this.getApplicationContext();
mainRelative = (RelativeLayout) findViewById(R.id.relativeLayout1);
imgView = (DrawView) findViewById(R.id.frag_home_iv_main);
resetBtn = (Button) findViewById(R.id.clearBtn);
undoBtn = (ImageButton) findViewById(R.id.undoBtn);
saveBtn = (Button) findViewById(R.id.saveBtn);
addTxtBox = (EditText) findViewById(R.id.addTxt);
brushImg = (ImageView) findViewById(R.id.imageBrush);
fontImg = (ImageView) findViewById(R.id.imageFont);
addedTxtView = (TextView) findViewById(R.id.drawTextView);
addedTxtView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ClipData.Item item = new ClipData.Item((CharSequence)v.getTag());
String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData = new ClipData(v.getTag().toString(),mimeTypes, item);
View.DragShadowBuilder myShadow = new View.DragShadowBuilder(addedTxtView);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Log.d("Vishal sdk","in if");
v.startDragAndDrop(dragData, myShadow, null, 0);
} else {
Log.d("Vishal sdk","in else");
v.startDrag(dragData, myShadow, null, 0);
}
return false;
}
});
addedTxtView.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
Log.d("Vishal check", String.valueOf(event.getAction()));
switch(event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
layoutParams = (RelativeLayout.LayoutParams)v.getLayoutParams();
Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_STARTED");
return true;
// Do nothing
case DragEvent.ACTION_DRAG_ENTERED:
Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_ENTERED");
int x_cord = (int) event.getX();
int y_cord = (int) event.getY();
return true;
case DragEvent.ACTION_DRAG_EXITED :
Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_EXITED");
x_cord = (int) event.getX();
y_cord = (int) event.getY();
layoutParams.leftMargin = x_cord;
layoutParams.topMargin = y_cord;
v.setLayoutParams(layoutParams);
v.setVisibility(View.VISIBLE);
// view.setVisibility(View.VISIBLE);
return true;
case DragEvent.ACTION_DRAG_LOCATION :
Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_LOCATION");
x_cord = (int) event.getX();
y_cord = (int) event.getY();
return true;
case DragEvent.ACTION_DRAG_ENDED :
Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_ENDED");
return true;
// Do nothing
case DragEvent.ACTION_DROP:
Log.d("Vishal Drag", "ACTION_DROP event");
/* x_cord = (int) event.getX();
y_cord = (int) event.getY();
View view = (View) event.getLocalState();
view.setX(x_cord - (view.getWidth() / 2));
view.setY(y_cord - (view.getWidth() / 2));
view.setVisibility(View.VISIBLE);*/
return true;
// Do nothing
default:
return true;
}
//return true;
}
});
addTxtBox.setImeOptions(EditorInfo.IME_ACTION_DONE);
addTxtBox.setRawInputType(InputType.TYPE_CLASS_TEXT);
addTxtBox.setVisibility(View.GONE);
// addedTxtView.setVisibility(View.GONE);
extras = getIntent().getExtras();
imgView.setImageURI(Uri.parse(extras.getString("selectedImg")));
imgView.setDrawingCacheEnabled(true);
brushImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgView.setBrushActive(true);
}
});
fontImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgView.setBrushActive(false);
addTxtBox.setVisibility(View.VISIBLE);
addTxtBox.requestFocus();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
}
});
addTxtBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
Toast.makeText(DrawActivity.this, addTxtBox.getText(), Toast.LENGTH_SHORT).show();
addedTxtView.setVisibility(View.VISIBLE);
txtVal = addTxtBox.getText().toString();
imgView.getTxtValue(addTxtBox.getText().toString());
addedTxtView.setText(addTxtBox.getText().toString());
addedTxtView.setTag(addTxtBox.getText().toString());
addTxtBox.setVisibility(View.GONE);
try {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(addTxtBox.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
}catch (Exception e){
e.printStackTrace();
}
return true;
}
return false;
}
});
resetBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgView.resetPaths();
}
});
undoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imgView.removeLastPath();
}
});
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bitmap = imgView.getDrawingCache();
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
path.mkdirs();
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
File imageFile = new File(path, ts+".png"); // Imagename.png
try{
FileOutputStream out = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); // Compress Image
try {
out.flush();
out.close();
} catch (IOException e){
e.printStackTrace();
}
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(context,new String[] { imageFile.getAbsolutePath() }, null,new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
Toast.makeText(context,"Saved", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(DrawActivity.this, MainActivity.class);
startActivity(intent);
} catch(FileNotFoundException e) {
Toast.makeText(context,"Error" + e.toString(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
});
}
public void redrawImage() {
Bitmap bm = imgView.getDrawingCache();
Bitmap proxy = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(proxy);
Paint paint = new Paint();
// paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
paint.setTextSize(100);
paint.setAntiAlias(true);
c.drawBitmap(bm, new Matrix(), paint);
c.drawText(txtVal, imgView.getWidth()+rowX, imgView.getHeight()+rowY, paint);
imgView.setImageBitmap(proxy);
}
public void changeColor(View view) {
Log.d("Vishal selected color", view.getTag().toString());
switch (view.getTag().toString()){
case "red":
imgView.setBrushColor(Color.RED);
break;
case "blue":
imgView.setBrushColor(Color.BLUE);
break;
case "green" :
imgView.setBrushColor(Color.GREEN);
break;
case "yellow":
imgView.setBrushColor(Color.YELLOW);
break;
case "purple":
imgView.setBrushColor(getResources().getColor(R.color.purple));
break;
default:
imgView.setBrushColor(Color.BLACK);
}
//
}
activity_draw.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/black" >
<ImageButton
android:id="@+id/undoBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:src="@drawable/undo"/>
<Button
android:id="@+id/clearBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clear"
android:layout_toLeftOf="@+id/saveBtn"/>
<Button
android:id="@+id/saveBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:layout_alignParentRight="true"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.8"
android:orientation="vertical"
android:id="@+id/draw_image_linearView">
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.example.mobilesolution.imgedit.DrawView
android:id="@+id/frag_home_iv_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
<TextView
android:id="@+id/drawTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="100dp"
android:layout_centerInParent="true"
android:textColor="@android:color/black"
android:textSize="16dp"
/>
<EditText
android:id="@+id/addTxt"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Enter some text"
android:inputType="textMultiLine"
android:maxLines="3"
android:elevation="10dp"/>
</RelativeLayout>
</RelativeLayout>
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fillViewport="true"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:scrollbars="none"
android:layout_weight="0.2">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="447dp"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/redBall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:onClick="changeColor"
android:src="@drawable/red_ball"
android:tag="red" />
<ImageView
android:id="@+id/blueBall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:onClick="changeColor"
android:src="@drawable/blue_ball"
android:tag="blue" />
<ImageView
android:id="@+id/greenBall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:onClick="changeColor"
android:src="@drawable/green_ball"
android:tag="green" />
<ImageView
android:id="@+id/yellowBall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:onClick="changeColor"
android:src="@drawable/yellow_ball"
android:tag="yellow" />
<ImageView
android:id="@+id/purpleBall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:onClick="changeColor"
android:src="@drawable/purple_ball"
android:tag="purple" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/red_ball" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/red_ball" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/red_ball" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/green_ball" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/green_ball" />
</LinearLayout>
</LinearLayout>
</HorizontalScrollView>
<RelativeLayout
android:id="@+id/brushBtnLayout"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:background="@android:color/black">
<ImageView
android:id="@+id/imageBrush"
android:layout_width="65dp"
android:layout_height="37dp"
android:layout_marginLeft="66dp"
android:layout_marginStart="66dp"
android:background="@android:color/white"
android:src="@drawable/brush"
android:layout_alignTop="@+id/imageFont"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ImageView
android:id="@+id/imageFont"
android:layout_width="65dp"
android:layout_height="37dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginEnd="52dp"
android:layout_marginRight="52dp"
android:background="@android:color/white"
android:src="@drawable/font" />
</RelativeLayout>
最佳答案
当拖动存在时,您应该设置 X
和 Y
坐标,而不是设置边距。
再次更新 放置 View 是您的 TextView 应该放入的位置。这应该包含拖动监听器
frag_home_iv_main.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
int action = dragEvent.getAction();
View viewdrag = (View) dragEvent.getLocalState();
if(action == DragEvent.ACTION_DRAG_ENTERED){
//do something
}
else if(action == DragEvent.ACTION_DRAG_EXITED){
//do something
Log.d("Vishal Drag", "Action is DragEvent.ACTION_DRAG_EXITED");
x_cord = (int) event.getX();
y_cord = (int) event.getY();
viewdrag .setY(y_cord);
viewdrag .setX(x_cord);
}
else if(action == DragEvent.ACTION_DROP){
//do something
}
return true;
}
});
关于Android-Textview 在拖动操作时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510361/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!